У меня есть этот предикат spaces_uni(Spc,LstWords)
, Spc — это список переменных, таких как [X,Y,Z]
или [a,Y,Z]
, а LstWords — это список слов, таких как [[o,r,a,n,g,e],[a,p,p,l,e],[b,a,n,a,n,a]]
.
Цель этого предиката — проверить, есть ли в LstWords слово, которое может унифицироваться с данным Spc.
Пример:
?- Words = [[a,m,e,n,o],[a,t,o],[d,a,o],[d,r,a,m,a],[m,a,e],[m,a,n,d,e],[s,e,d,e],[s,o,a,r]], Space = [d,A,B,C,D], spaces_uni(Space,Words).
true.
Так почему же вывод истинный, простой, потому что слово драма объединяется с [d,A,B,C,D] и становится [d,r,a,m,a]. Проблема в том, что моя программа вместо этого возвращает false, и я не понимаю, почему.
Программа:
spaces_uni(E,[P|R]) :-
length(E,CE),
length(P,CP),
CE \== CP,!,
spaces_uni(E,R).
spaces_uni(E,[P|R]) :-
length(E,CE),
length(P,CP),
CE == CP,!,
P \= E,
spaces_uni(E,R).
spaces_uni(E,[P|_]) :-
length(E,CE),
length(P,CP),
CE == CP,
{}/(P = E),!,
true.
На самом деле любая помощь будет оценена по достоинству.