【发布时间】:2021-06-18 19:18:31
【问题描述】:
我在prolog online的99-problems中发现了这个问题。有一个解决方案(与我的无关),我想知道为什么我的不起作用。或者更准确地说:它有效,但它只找到 1 个解决方案而不是所有解决方案。问题是这样表述的: a) 一个 9 人的小组在 2、3 和 4 人的 3 个不相交的小组中可以有多少种工作方式?
member(X,[X]).
member(X,[X|_]).
member(X,[_|R]):- member(X,R).
append(X,[],X).
append([],X,X).
append([H|R], [A|B], [H|W]):- append(R,[A|B],W).
group234(G,G2,G3,G4):- length(G2,2),
length(G3,3),
length(G4,4),
member(X,G),
member(Y,G),
member(Z,G),
member(X,G2),
member(Y,G2),
member(Z,G3),
append(G2,G3,I),append(I,G4,G).
q1:有没有办法像我一样使用 length 和 append 和 member 并成功地单独使用它,还是我需要完全重写它?
q2:为什么会这样代码只产生1个解决方案? Prolog 应该搜索许多可能的成员,不是吗?(显然,它不应该,因为该语言比我知道得更好。但据我了解,它应该那么为什么不呢?)
【问题讨论】:
-
你说G(9人组)是I和G4的拼接,I是G2和G3的拼接,所以你说G是G2,G3的拼接和 G4(按此顺序)。因此,您已经将 G 拆分为第一组 2,然后是一组 3,最后是一组 4。这种有序拆分只有一个解决方案。
标签: prolog