考虑:
bar([], Ws, Ws).
bar([X|Xs], Ys, [X|Zs]) :- bar(Xs, Ys, Zs).
1)这怎么没有解决方案
bar([1,2], [], [X,X]).
2)当Z = 5时,它如何只有一个解?
bar([5,Y], [Y,5], [Z,Z|_]).
3)当Z = 5且Y = 5时,它如何只有一个解?
bar([_,Y], [5,5], [Z,Z,Z|_]).
答案 0 :(得分:1)
首先,考虑bar/3
的含义:规则有三个表示列表的参数。当最后一个列表是前两个列表的串联时,bar/3
返回一个解决方案:
bar([1,2,3], [4,5], X) // X=[1,2,3,4,5]
bar([1,2,3], X, [1,2,3,4,5]) // X=[4,5]
bar(X, [4,5], [1,2,3,4,5]) // X=[1,2,3]
了解这一点,您可以找到所有问题的答案:
bar([1,2], [], [X,X]).
需要X同时与1和2统一,这是不可能的bar([5,Y], [Y,5], [Z,Z|_]).
将第一个Z统一为5,将第二个Z与Y统一,以获得单个解决方案bar([_,Y], [5,5], [Z,Z,Z|_]).
将Y与第二个Z统一,第三个Z与5统一,用于单个解决方案。