【发布时间】:2020-08-08 09:14:48
【问题描述】:
我有这个谓词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.
真的很感激任何帮助。
【问题讨论】:
标签: list prolog unification