Prolog:在给定模式的情况下生成列表的每个可能性

时间:2016-04-12 16:37:49

标签: list prolog

我们假设您在Prolog中有一个列表,例如:[3,4,2,2,1,4]。如何生成从列表的第一个元素开始的所有可能模式的列表列表,然后转到第i + 2个元素或第i + 3个元素,依此类推。

实施例: 我说[3,4,2,2,1,4,8]。 我希望能够生成列表列表,例如: [[3,2,1,8],[3,2,4],[3,2,8]]

即。每个其他元素或每个i + 3元素或任何其他组合的所有可能性,例如i + 2,i + 3,i + 2,i + 2等。

我已经实现了我自己的powerset版本,但我似乎无法弄清楚从哪里开始。

1 个答案:

答案 0 :(得分:1)

"PDF_VALIDATION_FAILED"

结果

gen([], []).
gen([A], [A]).
gen([A, _ | T], [A | Xs]) :- gen(T, Xs).
gen([A, _, _ | T], [A | Xs]) :- gen(T, Xs).

您可以使用?- gen([3,4,2,2,1,4,8], X). X = [3, 2, 1, 8] ; X = [3, 2, 1] ; X = [3, 2, 4] ; X = [3, 2, 4] ; X = [3, 2, 8] ; false. 获取所有结果

findall/3