| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- %********** Facts **********
- cotesEgaux(X) :- ask(cotesEgaux, 'Combien la figure a-t-elle de côtés égaux ? ', X).
- angleDroit(X) :- ask(angleDroit, 'La figure possède-t-elle des angles droits (oui, non) ? ', X).
- cotesParalleles(X) :- ask(cotesParalleles, 'Combien la figure a-t-elle de côtés parallèles (0, 2 ou 4) ? ', X).
- ordre(X) :- ask(ordre, 'Combien de côtés ? ', X).
- %********** Moteur **********
- :- dynamic memory/2.
- solve :-
- retractall(memory(_,_)),
- findall(X, nom(X), R),
- write(R).
- ask(Pred, _, X) :-
- memory(Pred, X).
- ask(Pred, _, _) :-
- memory(Pred, _),
- !,
- fail.
- ask(Pred, Question, X) :-
- write(Question),
- read(Y),
- asserta(memory(Pred, Y)),
- X == Y.
- %********** Rules **********
- % Triangles
- nom(triangle) :-
- ordre(3).
- nom(triangleIsocele) :-
- nom(triangle),
- cotesEgaux(2).
- nom(triangleRectangle) :-
- nom(triangle),
- angleDroit(oui).
- nom(triangleRectangleIsocele) :-
- nom(triangleIsocele),
- nom(triangleRectangle).
- nom(triangleEquilateral) :-
- nom(triangle),
- cotesEgaux(3).
- % Quadrilateres
- nom(quadrilatere) :-
- ordre(4).
- nom(trapeze) :-
- nom(quadrilatere),
- cotesParalleles(2).
- nom(parallelogramme) :-
- nom(quadrilatere),
- cotesParalleles(4).
- nom(rectangle) :-
- nom(parallelogramme),
- angleDroit(oui).
- nom(losange) :-
- nom(parallelogramme),
- cotesEgaux(4).
- nom(carre) :-
- nom(losange),
- nom(rectangle).
|