基本上,我需要创建一个 sublist(S,M,N,L) 形式的谓词,其中 S 是由索引 M 和索引 N 之间的 L 的元素形成的新列表,包括在内。
这是我得到的地方:
sublist([],_,_,[]).
sublist([],M,N,_) :- (M > N).
sublist(S,M,N,L) :- sublist2(S,M,N,L,-1).
sublist2([H|T],St,En,[H2|T2],Idx) :-
(Idx2 is Idx + 1,
St =< Idx2,
En >= Idx2,
H = H2,
sublist2(T,St,En,T2,Idx2);
Idx2 is Idx + 1,
sublist2(T,St,En,T2,Idx2)).
和我所有的序言问题一样,我觉得我让它变得比它应该的更复杂。我的基本情况是正确的,但其他任何事情的评估结果都是错误的。关于这个问题的任何建议,以及序言的一般方法?我在很大程度上理解该语言,但我似乎看不到简单的解决方案。