我正在尝试解决一个简单的序言问题,但我无法解决它。从列表中,需要创建一个给定索引 I 的子列表,然后从 I 中创建一个给定为 N 的下一个元素。如果索引大于列表长度,我将使子列表为空。如果 N(元素数量)大于列表中的其余元素,我将获得从 I 到末尾的所有元素。
在这里,我得到了作业的一部分,我可以从索引 I 中得到下一个元素 N。现在我询问作业中的其他部分:
1) When I
(索引)比列表长度长,我必须在子列表中获取一个空列表。
?- sublist([a,b,c,d],5,2,L)
L=[]
2) When N
(下一个元素)大于我们剩余的元素数量,我需要获取从该位置到末尾的所有元素。
?- sublist([a,b,c,d],4,4,L)
L=[d]
我已经拥有的代码是下一个,这个正在工作:
sublist([X|_],1,1,[X]).
sublist([],_,_,[]).% I use this one for the case bases
sublist([X|Xs],1,K,[X|Ys]):-
K>1,
K1 is K-1,
sublist(Xs,1,K1,Ys).
sublist([_|Xs],I,K,Ys):-
I > 1,
I1 is I-1,
sublist(Xs,I1,K,Ys).