在prolog中使用限制索引查找子列表

时间:2017-04-04 14:14:21

标签: prolog

如果subList(I1,I2,L,Sub)是列表Sub的子列表,则谓词L成立。 Sub包含L中从索引:I1I2的元素。这是我的解决方案,但是当我要求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).

0 个答案:

没有答案