如果subList(I1,I2,L,Sub)
是列表Sub
的子列表,则谓词L
成立。 Sub
包含L
中从索引:I1
到I2
的元素。这是我的解决方案,但是当我要求False
时,它会给出subList(1,2,[1,2,3,4],X)
。我不知道为什么!
sublist(_,_,[],[]).
subList(1,I2,L,Sub):-
length(L,X),
X==I2,
Sub=L.
subList(1,1,[H|T],Sub):-Sub=[H].
subList(1,0,[H|T],Sub):-Sub=[H].
subList(I1,I2,[H|T],Sub):-subListHelper(I1,I2,[H|T],[_|T2],1).
subListHelper(I1,I2,[H|T],[_|T2],Acc):-
I1==ACC,
I1=<I2,
I3 is I1+1,
NewAcc is ACC+1,
subListHelper(I3,I2,[T],[H|T2],NewAcc).
subListHelper(I1,I2,[H|T],[_|T2],Acc):-
I1 \= Acc,
I1=<I2,
NewAcc is ACC+1,
subListHelper(I1,I2,[T],[_|T2],NewAcc).