私は次のような事実を持っています:
like(sara,'data base',3).
like(sara,'math',3).
like(sara,'physics',3).
like(sara,'law',3).
like(sara,'history',5).
like(sara,'science',1).
like(tom,'chemistry',3).
like(tom,'data base',2).
like(tom,'logic',3).
like(tom,'law',3).
like(tom,'history',3).
like(tom,'science',3).
:- dynamic same_like/3.
事実を比較して、サラとトムの両方が好きであるがレベルが異なる主題を見つけたいので、私がしていることは次のとおりです。
comp1 :-
like(sara, NofC1, X),
like(tom, NofC2, Y),
NofC1 = NofC2,
asserta( same_like(sara, NofC1, X) ),
asserta( same_like(tom, NofC2, Y) ),
same_like(sara, NC1, A),
same_like(tom, NC2, B),
NC1 = NC2,
A =\= B,
write('sara and tom like the same subject " '),
write(NC1),
write(' " .But with different level, sara= '),
write(A),
write(' And tom = '),
write(B),
nl,
fail.
答えは正しかったが、答えには繰り返しがあります:
sara and tom like the same subject " data base " .But with different level, sara= 3 And tom = 2
sara and tom like the same subject " data base " .But with different level, sara= 3 And tom = 2
sara and tom like the same subject " history " .But with different level, sara= 5 And tom = 3
sara and tom like the same subject " data base " .But with different level, sara= 3 And tom = 2
sara and tom like the same subject " science " .But with different level, sara= 1 And tom = 3
sara and tom like the same subject " history " .But with different level, sara= 5 And tom = 3
sara and tom like the same subject " data base " .But with different level, sara= 3 And tom = 2
false
。
問題は、どうすればこの繰り返しを取り除くことができるかということです。:(