Cursos‎ > ‎Martes Anual‎ > ‎Bitácora‎ > ‎

Clase 9 - Lógico

Qué vimos hoy?
  • Negación
  • Para todo (forall)
  • Individuos compuestos (functores y listas)
  • findall para armar listas de todos aquellos individuos que cumplan una condición
  • Hablamos más de inversibilidad y orden superior
Tarea

Dada la siguiente Base de Conocimientos

poder(krilin, 3000).
poder(gohan, 4900).
poder(piccolo, 4200).
poder(goku, 5700).
poder(vegeta, 5600).
poder(goten, 4300).
poder(trunks, 4350).

loBancaA(krilin, gohan).
loBancaA(goku, gohan).
loBancaA(goku, krilin).
loBancaA(piccolo, gohan).
loBancaA(goten, trunks).
loBancaA(trunks, goten).
loBancaA(_, goku).

Armar un programa Prolog que cumpla las siguientes condiciones:

1) a) Decir cuál guerrero es el más poderoso.
       Un guerrero es el más poderoso si su poder es mayor al de todos los demas. Debe ser totalmente inversible.

    b) Decir si un guerrero es solitario.
        Un guerrero es Solitario si no lo banca ningun otro guerrero. Debe ser totalmente inversible.

2) Realizar el predicado fusionesPosibles/2, que relaciona un guerrero con todas las fusiones posibles que este puede realizar con otro guerrero.
Dos guerreros pueden fusionarse si no son solitarios y
- el poder entre ambos guerreros es de una diferencia menor o igual a 100, o
- si ambos guerreros se bancan mutuamente.

Una fusión se modela con el functor fusion/2.

Ejemplo:
?- fusionesPosibles(goku, Fusiones).
Fusiones = [fusion(goku,gohan), fusion(goku,krilin)]
Porque todos bancan a Goku, o sea que se puede fusionar con todos los que él banque. No se fusiona con Vegeta porque es solitario.

Ayudita: 
?- abs(-20, X).
X = 20. 

3) Saber si alguien esGroso/1.
Un guerrero es groso si su poder es mayor a 5000.
Una fusión es grosa cuando el poder de cada uno de los guerreros que la componen es mayor a 4000.
Comments