miércoles, 2 de mayo de 2012

Respuesta 1er reto en Prolog (eyoZ)


Que tal, como dije, en la anterior entrada del blog hoy publicare la respuesta al reto propuesto (ver): bien comencemos:

Parte 1:

Nuestro licenciado trato de generar Fbf, pero no lo consiguió del todo, aquí su trabajo:

1.- ¬invetigador(x) v otras_habilidades v constructor_futuro(x)
2a.- ingeniero(x) v investigador(x)
2b.- científico(x) v investigador(x)
3a.- ¬ing_informatica(x) ^ otras_habilidades(x)
3b.- ¬ing_informatica(x) ^ ingeniero(x)

Como podrás darte cuenta el problema que se le a encargado a esta persona esta erróneo, pero no en su totalidad, recuerda que cualquier Fbf tiene que estar ligada a través de “v” y negando el primer predicado:

¬pvq~p→q

Una vez dicho esto será más claro notar los errores que existen en su lógica, corrigiéndolos quedara así:

1.- ¬invetigador(x) v otras_habilidades v constructor_futuro(x)
2a.- ¬ingeniero(x) v investigador(x)
2b.- ¬científico(x) v investigador(x)
3a.- ¬ing_informatica(x) v otras_habilidades(x)
3b.- ¬ing_informatica(x) v ingeniero(x)

Parte 2:

Ahora se te pide que hagas un programa en Prolog, con las Fbf obtenidas (si no sabes que necesitas revisa esta entrada (ver)), quedando de esta forma:

 constructor_futuro(X):-
            investigador(X),
            otras_habilidades(X).

 investigador(X):-
            ingeniero(X).

 investigador(X):-
            cientifico(X).

 ingeniero(X):-
            ing_informatica(X).
           
 otras_habilidades(X):-
            ing_informatica(X).

  cientifico('extmail').
  ing_informatica('alberto').

Como habrás notado una vez que tienes la Fbf solo es separar el consecuente, para generar la regla, las (,) significan un AND, y los (;) un OR, las reglas se construyen por el siguiente símbolo (:-) el cual significa un IF, para entra mas a fondo a los operadores te recomiendo veas los que aquí escribo (ver).

Parte 3:

Realizando las consultas que se pidieron los valores retornados son:

1.- ing_informatica(alberto)
Yes, ya que al buscar Prolog encuentra que es un Hecho

2.- ing_informatica(extmail)
No, ya que la búsqueda que hace Prolog determina que el Hecho que menciona a extmail, no es contenido por ing_informatica(), si no por científico()

3.- investigador(eyoz)
No, ya que eyoz, no figura como argumento en ningún Hecho, o Regla

4.- constructor_futuro(alberto)
Yes, ya que al hacer la búsqueda Prolog se encuentra con un Hecho que menciona a alberto, y después entre Regla y Regla, descubriendo que las Reglas hacen referencia a otras

5.- constructor_futuro(x)
Esta regla traerá a todos los constructores_futuros(), a los que se hace referencia en la base de conocimiento de nuestro programa, pero solo traerá a alberto,
Si colocamos un (;), desechara a la variable encontrada e ira en busca de otra posible respuesta, como en la base del conocimiento no se encuentran mas personas que cubran esta cualidad retornara un valor no.

Bien eso es todo, nos leemos en la próxima…

Dudas, comentarios, ya sabes retoswm [at] gmail.com

No hay comentarios:

Publicar un comentario