Você está na página 1de 2

:-dynamic memory/2.

nombre(triangulo):- orden(3).
nombre(triangulo_isosceles):-
nombre(triangulo),
lados_iguales(2).

nombre(triangulo_rectangulo):-
nombre(triangulo),
angulo_recto(si).

nombre(triangulo_rectangulo_isosceles):-
nombre(triangulo_isosceles),
nombre(triangulo_rectangulo).

nombre(triangulo_equilatero):-
nombre(triangulo),
lados_iguales(3).

%Cuadrilateros
nombre(cuadrilatero):- orden(4).
nombre(trapecio):-
nombre(cuadrilatero),
lados_paralelos(2).

nombre(paralelograma):-
nombre(cuadrilatero),
lados_paralelos(4).

nombre(rectangulo):-
nombre(paralelogramo),
angulo_recto(si).

nombre(rombo):-
nombre(paralelogramo),
lados_iguales(4).

nombre(cuadrado):-
nombre(rombo),
nombre(rectangulo).

ask(Pred,_,X):-
memory(Pred,X).
ask(Pred,_,X):-
memory(Pred,X),
!,
fail.

ask(Pred,Question,X):-
write(Question),
ready(Y),
assert(memory(Pred,Y)),
X==Y.

lados_iguales(X):- ask(lados_iguales,'¿Cuantos lados iguales tiene la figura?',X).


angulo_recto(X):- ask(angulo_recto,'¿La figura posee angulos rectos (si/no)?',X).
lados_paralelos(X):- ask(lados_paralelos,'¿Cuantos lados paralelos tiene la figura(0,2 o 4)?',X).
orden(X):- ask(orden,'¿Cuantos lados?',X).
solve:-
retractall(memory(_,_)),
findall(X,nombre(X),R),
write(R).

Você também pode gostar