, รstman, - , Prolog ? , . , , .
-, edu_le(A,B) :- edu_less(A,B)., larsmans. :
edu_le1(A, A).
edu_le1(A, B) :- edu_less(A, C), edu_le1(C, B).
edu_le, : , (edu_le1 ). , , ; , SWI:
?- edu_le1(hs, hs)
true ;
false.
, , - false, ( ):
edu_le2(A, A) :- !.
edu_le2(A, B) :- edu_less(A, C), edu_le2(C, B).
, false:
?- edu_le2(hs, hs)
true.
?-
, : , , , :
?- edu_le1(hs, B) %same, with more copies, for edu_le
B = hs ;
B = college ;
B = masters ;
B = phd ;
false.
?- edu_le2(hs, B)
B = hs. %bad!
?-
, :
edu_le edu_le1 edu_le(?A, ?B),
edu_le2 edu_le2(+A, +B) (. [1] ). ,
edu_le2 , . ,
edu_le2 , .. , , . , , . , .
, edu_le1 , , A B . , A B . =, = , . ==:
edu_le3(A, B) :- (A == B -> ! ; true), A = B.
edu_le3(A, B) :- edu_less(A, C), edu_le3(C, B).
, , A B . , , :
?- edu_le3(A, A).
true.
?- edu_le3(A, B). %note that A and B are not the same term
A = B ;
A = hs,
B = college ;
A = hs,
B = masters ;
A = hs,
B = phd ;
A = college,
B = masters ;
A = college,
B = phd ;
A = masters,
B = phd ;
false.
?-
Prolog .
I do not think that there is a way to eliminate the latter falsewithout introducing too much dependence on edu_lt. This is because we must open up the possibility that there is one more edu_ltto study, in case you decide to enrich it with more fundamental facts later. So, in my opinion, this is the best you can have.
[1] SWI Prolog Reference Manual, Section 4.1.