【问题标题】:Combinatios in List of LIsts Prolog列表 Prolog 列表中的组合
【发布时间】:2012-04-27 17:21:59
【问题描述】:

我需要在列表列表中找到组合。 例如给出以下列表,

列表 = [[1, 2], [1, 2, 3]]

这些应该是输出,

梳 = [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3]]

另一个例子:

列表 = [[1,2],[1,2],[1,2,3]]

梳 = [[1,1,1],[1,1,2],[1,1,3],[1,2,1],[1,2,2],[1,2 ,3]....等]

我知道如何为具有两个子列表的列表执行此操作,但它需要适用于任意数量的子列表。

我是 prolog 新手,请帮忙。

【问题讨论】:

    标签: prolog combinations


    【解决方案1】:
    try([],[]).
    try([L|Ls],[M|Ms]):-
        member(M,L),
        try(Ls,Ms).
    
    all(L,All) :- findall(M, try(L,M), All).    
    

    try 返回一个由第一个参数的子列表的元素组成的列表。 all 查找所有此类列表。

    【讨论】:

      【解决方案2】:

      作为一个新的 prolog 程序员,这就是你的答案。

      %elementInList(input list, output answer)
      answer(ListOfList, AnswerInList) :-
          findall(Ans, combList(ListOfList, Ans), AnswerInList).
      
      %combList(ListOfList, Comb) :-
      combList([], []).
      
      combList([Head|Tail], Comb) :-
          combList(Tail, [Element|Tempcomb]),
          elementInList(Head, Element).
      
      %elementInList(List, Element)
      elementInList([Head|_], Head).
      
      elementInList([Head|Tail], Element) :-
          elementInList(Tail, Element).
      

      使用定义 answer(InputList, OutputResult),例如

      answer([[1,2],[7,8]],Comb).
      Comb = [[1, 7], [2, 7], [1, 8], [2, 8]].
      

      例如

      answer([[1,2],[2,8],[3,6,9]],Comb).
      Comb = [[1, 2, 3], [2, 2, 3], [1, 8, 3], [2, 8, 3], [1, 2, 6], [2, 2, 6], [1, 8|...], [2|...], [...|...]|...].
      

      以此类推 [X,Y,Z,..] 用于任意数量的子列表。不客气。

      【讨论】:

        猜你喜欢
        • 2020-06-20
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 2011-08-26
        • 2016-01-12
        相关资源
        最近更新 更多