查找具有唯一头部的列表排列

时间:2015-05-01 09:54:14

标签: list prolog permutation

我有一个独特元素的列表,我想生成该列表的排列,但我只希望元素一次成为列表的头部,如下所示:

?- special_permutation([a,b,c], X).
X = [a,b,c] ;
X = [b,a,c] ;
X = [c,a,b] ;
false.
?- special_permutation([a,b,c,d,e], X).                                 
X = [a, b, c, d, e] ;
X = [b, a, c, d, e] ;
X = [c, a, b, d, e] ;
X = [d, a, b, c, e] ;
X = [e, a, b, c, d] ;
false.

(尾部元素的顺序对我来说并不重要)

我到目前为止所做的是:

test([Head|Tail], [AltHead|AltTail]) :-
    permutation([Head|Tail], [AltHead|AltTail]),
    Head \= AltHead.

返回头部为a的排列,但返回b和c的两个排列。

也许我需要为每个元素存储一个排列,其中元素是头部,然后在进行新的排列时,检查它们的头部是否已经是该存储列表中某个排列的头部?

关于如何实现这一目标的任何想法,或更简单的方法?

0 个答案:

没有答案