繁体   English   中英

从Prolog中的List中选择N个元素

[英]Select N elements from a List in Prolog

我正在尝试编写一个Prolog谓词(SWI),它将从List中选择N个元素,如下所示:

List1 (删除了所有Elems )导致List2时, selectn+ N?Elems?List1?List2 )为真。

selectn(N,Lps,L1s,[]) :- length(L1s,L), N >= L, permutation(L1s,Lps).
selectn(0,[],L1s,Lps) :- permutation(L1s,Lps).
selectn(N,[E|Es],L1s,L2s) :- 
    select(E,L1s,L0s),
    N0 is N-1,
    selectn(N0,Es,L0s,L2s).

我的问题是,在某些情况下,我得到重复的结果,我不知道如何避免它们:

?- findall(L,selectn(2,Es,[a,b,c],L),Ls),length(Ls,Solutions).
Ls = [[c], [b], [c], [a], [b], [a]],
Solutions = 6.

这不是功课,但如果你想像我一样帮助我,我也会很高兴。

这可以回答你的问题(虽然我不明白你的第一个条款selectn / 4,排列已经由'嵌套'select / 3完成了)

selectn(0, [], Rest, Rest).
selectn(N, [A|B], C, Rest) :-
    append(H, [A|T], C),
    M is N-1,
    selectn(M, B, T, S),
    append(H, S, Rest).

产量

?- findall(L,selectn(2,Es,[a,b,c],L),Ls),length(Ls,Solutions).
Ls = [[c], [b], [a]],
Solutions = 3.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM