尝试编写代码,将偶数元素的列表分成两半,例如。 split([1,2,3,4],A,B)
会A = [1,2]
和B = [3,4]
。
对于奇数个元素,行为类似于Java list.length()/2
,因此split([1,2,3,4,5],A,B)
会提供A = [1,2]
和B = [3,4,5]
。
我能得到的最接近的是这样的,但这不太对,只适用于偶数。
split(L, A, B) :-
append(A, B, L),
length(A, N),
length(B, N).
答案 0 :(得分:2)
在Prolog中将列表拆分为一半的一种方法是使用append/3
和same_length/2
谓词:
split(List, Left, Right) :-
same_length(Left, Right),
append(Left, Right, List).
split(List, Left, [R|Rs]) :-
same_length(Left, Rs),
append(Left, [R|Rs], List).
这会给你:
| ?- split(L, A, B).
A = B, B = L, L = [] ;
A = [_1038],
B = [_1048],
L = [_1038, _1048] ;
A = [_1038, _1044],
B = [_1054, _1060],
L = [_1038, _1044, _1054, _1060] ;
A = [_1038, _1044, _1050],
B = [_1060, _1066, _1072],
L = [_1038, _1044, _1050, _1060, _1066, _1072] ;
...