除法表(List,List1,List2)
以便List的元素在List1和List2之间分区。例如 ?
dividelist([a,b,c,d],[a,c,e],L).
L=[b,d]
答案 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 )
.