我们假设您在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版本,但我似乎无法弄清楚从哪里开始。
答案 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