Ejemplo de como resolver un problema lógico con Prolog

[prolog]
predicates
hermanaMenor(integer, integer, integer, integer, integer)
hermanaMayor(integer, integer, integer, integer, integer)
checaHermana(symbol, integer, integer)
restart(symbol)
salida
start

clauses
start:-write("--------- Enigma de la viuda v1.0 ---------"), nl, nl,
write("¿Cual es el resultado de la multiplicacion delas edades? "), readint(M),
write("¿La mayor tiene ojos verdes? ( y / n )? "), readLn(RES),
write("¿Cual es el número de la casa de enfrente? "), readint(C), checaHermana(RES, M, C).

checaHermana(RES, M, C):- RES="y", hermanaMayor(1, 1, 1, M, C).
checaHermana(RES, M, C):- RES="n", hermanaMenor(1, 1, 1, M, C).

hermanaMayor(X, Y, Z, M, _):- X=M, Y=M, Z=M, salida.

hermanaMayor(X, Y, Z, M, C):- X>Y, X>Z, Y>=Z, X*Y*Z=M, X+Y+Z=C,
write("Las edades son:"), nl,
write("Primera Hija: ", X),nl,
write("Segunda Hija ", Y),nl,
write("Tercera Hija ", Z), nl, fail.

hermanaMayor(X, Y, Z, M, C):- X<=M, X2=X+1, hermanaMayor(X2, Y, Z, M, C).
hermanaMayor(1, Y, Z, M, C):- Y<=M, Y2=Y+1, hermanaMayor(1, Y2, Z, M, C).
hermanaMayor(1, 1, Z, M, C):- Z<=M, Z2=Z+1, hermanaMayor(1, 1, Z2, M, C).

hermanaMenor(X, Y, Z, M, _):- X=M, Y=M, Z=M, salida.
hermanaMenor(X, Y, Z, M, C):- X=Y, X>=Z, Y>=Z, X*Y*Z=M, X+Y+Z=C,
write("Las edades son:"), nl,
write("Primera Hija: ", X),nl,
write("Segunda Hija ", Y),nl,
write("Tercera Hija ", Z), nl, fail.

hermanaMenor(X, Y, Z, M, C):- X<=M, X2=X+1, hermanaMenor(X2, Y, Z, M, C).
hermanaMenor(1, Y, Z, M, C):- Y<=M, Y2=Y+1, hermanaMenor(1, Y2, Z, M, C).
hermanaMenor(1, 1, Z, M, C):- Z<=M, Z2=Z+1, hermanaMenor(1, 1, Z2, M, C).

salida:-write("¿Otra vez ( y / n )? "), readln(R), restart(R).
restart(R):-R="n", write("Gracias por utilizar este programa").
restart(R):-R="y", start.

goal
start, nl.

[/prolog]

Popularidad: 10%