gpt4 book ai didi

Prolog:创建子列表,给定两个索引

转载 作者:行者123 更新时间:2023-12-02 02:02:40 27 4
gpt4 key购买 nike

基本上,我需要创建一个 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)).

与我所有的序言问题一样,我觉得我让它变得比它应该的更复杂。我的基本情况是正确的,但其他任何事情的评估结果都是错误的。关于这个问题的任何建议,以及序言的一般方法?我在很大程度上理解该语言,但我似乎看不到简单的解决方案。

最佳答案

简单的解决方案遵循简单的前景。对于列表,它是递归的。递归编程很简单——想象一下你已经有了你的函数,遵循给定的接口(interface)/要求,所以你可以随时使用它(但在减少的情况下更好)。

sublist(S,M,N,[_A|B]):- M>0, M<N, sublist(S,M-1,N-1,B).

可以将其视为陈述子列表定律:较短列表中的子列表从减小的索引开始。
sublist(S,M,N,[A|B]):- 0 is M, M<N, N2 is N-1, S=[A|D], sublist(D,0,N2,B).

和,
sublist([],0,0,_).

它在第二个索引中是唯一的。调整它。 :)

关于Prolog:创建子列表,给定两个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com