假设我们有列表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].
答案 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。