【发布时间】:2014-12-12 23:21:26
【问题描述】:
我有以下例子:
bag(b1)
bag(b2)
item(i1)
item(i2)
item(i3)
item(i4)
现在我真的不明白如何才能从中获得所有可能性?我必须使用所有的包。 就像我应该得到这样的列表列表:
[
[together(b1, [i1,i2,i3,i4]), together(b2, [])]
,...,
[together(b1, [i1]), together(b2, [i2,i3,i4])]
[together(b1, [i1,i2]), together(b2, [i3,i4])]
]
等所有可能的组合但它必须使用所有项目。我知道我可以使用findall 获取事实,但后来我被卡住了
这就是我所拥有的:
test(X) :-
findall(C, bag(C),Bags),
findall(K, item(K),Items),
something???
关于从哪里开始的任何想法,因为我一无所知,我不明白如何思考才能达到这样的结果。
获得组合的可能想法:
item_combination(C) :-
findall(I, item(I), Is),
combination(Is, C).
combination(_, []).
combination(Set, [X|Xs]) :-
select(X, Set, Set0),
combination(Set0, Xs).
我需要类似的东西,获取第一个袋子的组合,然后转到下一个袋子,取一个组合,如果它有效(所有使用的项目)附加到列表中,否则返回第一个袋子与其他组合等等......还是有更好的解决方案?
提前致谢!
【问题讨论】:
标签: prolog combinations