1

考虑:

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|_]).
4

1 回答 1

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|_]).将 5 与第一个 Z 统一,将第二个 Z 与 Y 统一,以获得单一解决方案
  • bar([_,Y], [5,5], [Z,Z,Z|_]).将 Y 与第二个 Z 统一,将第三个 Z 与 5 统一为一个解。
于 2013-05-15T03:40:37.480 回答