我正在Prolog中编写一个谓词,将列表分成两个相等长度的列表.例如 :
div([1,2,3,4] , X , Y).
X = [1,2].
Y = [3,4].
Run Code Online (Sandbox Code Playgroud)
这是我的代码,但它不起作用:
div(L , L1 , L):- length(L) == length(L1).
div([ H | T ] , [ H | T1] , L2):- div(T , T1 , L2).
Run Code Online (Sandbox Code Playgroud)
可能只是:
div(L, A, B) :-
append(A, B, L),
length(A, N),
length(B, N).
Run Code Online (Sandbox Code Playgroud)
读作"附加列表A并且列表B导致原始列表L,A的长度是某个值N并且B的长度也是相同的值N".
有趣的是这种分裂不使用长度:
div(L, A, B) :-
split(L, L, A, B).
split(B, [], [], B).
split([H|T], [_, _|T1], [H | T2], B) :-
split(T, T1, T2, B).
Run Code Online (Sandbox Code Playgroud)
对于100 000个元素的列表,它使用50 001推断但是0,016 CPU,对于相同的列表,潜伏者的代码使用50 015推断和0,000 CPU.