如何获取列表中包含其他列表中所有元素的可能组合?

时间:2015-10-24 19:06:56

标签: list prolog

我有一个包含元素的列表:atoms和其他列表。我问以下问题:

  

- ? totobola([1,X,2,1,X,2,1,X,2,1,X,[1,X],[1,X,2]],LS)。


我希望LS成为一个列表,我将显示每个原子,然后是给定列表中列表的可能组合。

  

LS = [1,X,2,1,X,2,1,X,2,1,X,1,1];
  LS = [1,X,2,1,X,2,1,X,2,1,x,1,x]中;
  LS = [1,X,2,1,X,2,1,X,2,1,X,1,2];
  LS = [1,X,2,1,X,2,1,X,2,1,X,X,1];
  LS = [1,X,2,1,X,2,1,X,2,1,X,X,X];
  LS = [1,X,2,1,X,2,1,X,2,1,X,X,2];
  无

我目前的解决方案:

lista([_|_]):- true, !.
lista(_):- false.

totobola([],[]).
totobola([X|T1],[Y|T2]):-
    lista(X),
    !,
    member(Y,X),
    totobola(T1,T2).
totobola([X|T1],[X|T2]):-
    totobola(T1,T2).

使用lista我会检查X是否属于某个列表,但我没有LS=[1,x,2,1,x,2,1,x,2,1,x,1,1];获得LS = [1, x, 2, 1, x, 2, 1, x, 2|...]

有人可以指导我,或者至少告诉我我做错了什么或更不对劲?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

制作'重复'。查询然后按'w'键和'。'您将进入写入模式并查看列表中的所有值。

? - 重复。
true [写] - >按w一次后 是的。 - >输入一个点退出

答案 1 :(得分:0)

我们在ALGAV类,ISEP(葡萄牙)进行了这项练习,解决方案是:

is_list(X) :- var(X), !, fail.
is_list([]).
is_list([_|T]) :- is_list(T).

totobola([],[]).
totobola([H|T],[X|LR]):- is_list(H), !, member(X,H), totobola(T,LR). 
totobola([H|T],[H|LR]):- totobola(T,LR).