需要创建一个集群(L,A,B),该集群根据条件分别返回A和B上L的子列表

时间:2019-01-20 19:23:40

标签: prolog

假设我们有列表L = [1,5,32,5,7,8] 我需要创建一个集群(L,A,B),将L划分为2个子列表(A,B)。 假定A包含值32之前出现在列表L上的所有值。 B应该包含在值32之后出现在列表L上的所有值。 应该从两个列表中排除32。

?- cluster([11 , 18 , 9 , 32 , 13 , 12 ] , A , B).
A = [11 , 18 , 9], B = [13 ,12].

2 个答案:

答案 0 :(得分:3)

为什么不

cluster(L, Break, A,B) :-
    append(A, [Break|B], L).

例如

? cluster([11 , 18 , 9 , 32 , 13 , 12 ] , 32, A , B).
A = [11, 18, 9],
B = [13, 12] ;
false.

答案 1 :(得分:1)

这是您想要的操作的代码:

cluster([L|Rest],[L|A],B) :-
   L \= 32,
   cluster(Rest,A,B).

cluster([L|Rest],[],Rest):-
   L == 32.

此代码的作用是,遍历列表,并将值添加到A,直到达到第一个 32 值,然后将列表的其余部分直接分配给B。