introalg:taller09_1
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
introalg:taller09_1 [2009/03/21 21:14] – laura | introalg:taller09_1 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 154: | Línea 154: | ||
- un término se puede unificar con otro término si la función que los contiene es la misma, tiene la misma cantidad de argumentos y los argumentos se pueden unificar entre ellos (fíjense que esto es un procedimiento recursivo, ya que puede ser que los argumentos sean términos y que el procedimiento para unificación de términos tenga que aplicarse también a ellos). | - un término se puede unificar con otro término si la función que los contiene es la misma, tiene la misma cantidad de argumentos y los argumentos se pueden unificar entre ellos (fíjense que esto es un procedimiento recursivo, ya que puede ser que los argumentos sean términos y que el procedimiento para unificación de términos tenga que aplicarse también a ellos). | ||
+ | ===Pensando un poco más sobre variables y unificación=== | ||
- | ====Ejercicios==== | + | Supongamos que estamos trabajando con el siguiente conjunto de hechos (o base de conocimiento): |
+ | < | ||
+ | wizard(ron). | ||
+ | hasWand(ron). | ||
+ | hasBroom(ron). | ||
+ | quidditchPlayer(harry). | ||
+ | wizard(X) :- hasBroom(X), | ||
+ | hasBroom(X) :- quidditchPlayer(X). | ||
+ | </ | ||
+ | Cómo responde prolog a las siguientes preguntas? | ||
+ | * wizard(ron). | ||
+ | * witch(ron). | ||
+ | * wizard(hermione). | ||
+ | * witch(hermione). | ||
+ | * wizard(harry). | ||
- | - Expresen reglas las relaciones entre los miembros de la familia que describimos aquí mediante hechos: | + | Y ahora, introduzcamos algún cambio: |
< | < | ||
- | mujer(pepa). | + | wizard(X) :- hasBroom(X),hasWand(_). |
- | mujer(lucía). | + | |
- | mujer(rosa). | + | |
- | mujer(alba). | + | |
- | mujer(blanca). | + | |
- | hombre(armando). | + | |
- | hombre(julián). | + | |
- | hombre(esteban). | + | |
- | hombre(mario). | + | |
- | hombre(alejandro). | + | |
- | progenitor(). | + | |
- | progenitor(). | + | |
</ | </ | ||
+ | |||
+ | Qué efectos tiene este cambio? Por qué? | ||
+ | |||
+ | |||
+ | ====Desconocimiento: | ||
+ | |||
+ | El intérprete nos va a avisar cuando haya algún error o bien alguna cosa que le parece extraña en el archivo. Es importante leer los mensajes que nos dá el intérprete para interpretar qué está pasando en cada momento. Muchas veces se trata de cosas sin importancia: | ||
+ | < | ||
+ | ?- [' | ||
+ | Warning: / | ||
+ | Clauses of wizard/1 are not together in the source-file | ||
+ | Warning: / | ||
+ | Clauses of hasBroom/1 are not together in the source-file | ||
+ | % ejemplo.pl compiled 0.00 sec, 0 bytes | ||
+ | true. | ||
+ | |||
+ | ?- | ||
+ | </ | ||
+ | |||
+ | En este caso, lo único que nos dice el intérprete es que las aserciones que hacen referencia a wizard no están todas juntas en el archivo " | ||
+ | < | ||
+ | Warning: / | ||
+ | Redefined static procedure wizard/1 | ||
+ | Warning: / | ||
+ | Redefined static procedure hasWand/1 | ||
+ | </ | ||
+ | Acá el intérprete se queja porque había espacio en blanco delante del predicado, de la siguiente forma: | ||
+ | < | ||
+ | wizard(ron). | ||
+ | hasWand(ron). | ||
+ | </ | ||
+ | Algunas veces el intérprete se queja porque no le hemos definido los predicados que pretendemos usar, eso sí es grave, ya que no se puede realizar la interpretación, | ||
+ | < | ||
+ | ?- witch(hermione). | ||
+ | ERROR: toplevel: Undefined procedure: witch/1 (DWIM could not correct goal) | ||
+ | ?- | ||
+ | </ | ||
+ | < | ||
+ | ?- wizard(harry). | ||
+ | ERROR: wizard/1: Undefined procedure: hasWand/1 | ||
+ | </ | ||
+ | |||
+ | A veces le exigimos operaciones demasiado complicadas al intérprete, | ||
+ | < | ||
+ | ?- caballero(a). | ||
+ | ERROR: Out of local stack | ||
+ | </ | ||
+ | Para salir de esta situación, el intérprete nos dá el siguiente mensaje: | ||
+ | < | ||
+ | Action (h for help) ? | ||
+ | </ | ||
+ | Si presionamos la tecla ' | ||
+ | < | ||
+ | Action (h for help) ? Options: | ||
+ | a: | ||
+ | c: | ||
+ | g: | ||
+ | h (?): help | ||
+ | Action (h for help) ? | ||
+ | </ | ||
+ | Si presionamos la tecla ' | ||
+ | |||
+ | El próximo día vamos a ver un poco más qué pasa con la opción ' | ||
+ | |||
+ | ====Ejercicios==== | ||
+ | |||
- Digan cuáles de estas expresiones unifican y cuáles no (de la página sobre [[http:// | - Digan cuáles de estas expresiones unifican y cuáles no (de la página sobre [[http:// | ||
* A = A | * A = A | ||
Línea 185: | Línea 255: | ||
* A = f(A) | * A = f(A) | ||
* A = abc, xyz = X, A = X | * A = abc, xyz = X, A = X | ||
+ | - Implementen una regla que diga " | ||
+ | - Ahora un ratito de reflexión (sólo 10-15 mins, luego pasen al siguiente ejercicio). Recuerdan a los caballeros y pícaros? Traten de formalizar las oraciones que hablan de ellos y vean qué pasa. Vean qué cosas tienen que formalizar para la máquina, vean si anda, vean si la máquina puede lidiar con tanta complejidad... | ||
+ | - Expresen en reglas las relaciones entre los miembros de la familia que describimos aquí mediante hechos: | ||
+ | < | ||
+ | mujer(pepa). | ||
+ | mujer(lucía). | ||
+ | mujer(blanca). | ||
+ | mujer(rosa). | ||
+ | mujer(alba). | ||
+ | mujer(inés). | ||
+ | mujer(irene). | ||
+ | hombre(armando). | ||
+ | hombre(julián). | ||
+ | hombre(esteban). | ||
+ | hombre(mario). | ||
+ | hombre(alejandro). | ||
+ | hombre(martín). | ||
+ | hombre(matías). | ||
+ | progenitor(pepa, | ||
+ | progenitor(pepa, | ||
+ | progenitor(pepa, | ||
+ | progenitor(lucía, | ||
+ | progenitor(lucía, | ||
+ | progenitor(blanca, | ||
+ | progenitor(blanca, | ||
+ | progenitor(irene, | ||
+ | progenitor(armando, | ||
+ | progenitor(armando, | ||
+ | progenitor(armando, | ||
+ | progenitor(julián, | ||
+ | progenitor(julián, | ||
+ | progenitor(alejandro, | ||
+ | progenitor(alejandro, | ||
+ | progenitor(mario, | ||
+ | </ | ||
+ | Escriban reglas para expresar las relaciones '' | ||
+ | |||
+ | El libro [[http:// | ||
+ | * en la [[http:// | ||
+ | * en la [[http:// | ||
+ | |||
introalg/taller09_1.1237670086.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)