如何在prolog中找到分组列表。 dividelist(列表,列表1,列表2)

时间:2014-03-03 06:51:02

标签: prolog

除法表(List,List1,List2)

以便List的元素在List1和List2之间分区。例如 ?

dividelist([a,b,c,d],[a,c,e],L).
L=[b,d]

1 个答案:

答案 0 :(得分:0)

想一想。这是一个非常简单的递归问题。你有

  • 常规案例 源列表包含2个或更多元素。从源列表中获取前2个元素,并在每个结果列表中放置一个元素。然后,重新计算源列表的其余部分。

  • 特殊情况1: 源列表只包含一个元素。将其放在结果列表之一中。然后递归到源列表的剩余部分(空列表)。

  • 特殊情况2: 来源列表为空。你的工作已经完成。

这就是它的全部内容(在prolog中编写解决方案比在英语中编写解决方案要少)。

编辑以显示代码:

  • 如果将空列表([])划分为成功

    divide( []       , []     , []     ) .
    divide( [A]      , [A]    , []     ) .
    divide( [A,B|Xs] , [A|As] , [B|Bs] ) :-
      divide(Xs,As,Bs)
      .
    
  • 如果将空列表([])划分为失败,只需删除第一个子句:

    divide( [A]      , [A]    , []     ) .
    divide( [A,B|Xs] , [A|As] , [B|Bs] ) :-
      divide( Xs , As , Bs )
      .