gpt4 book ai didi

prolog - 生成列表并检查值是否在增加

转载 作者:行者123 更新时间:2023-12-02 09:07:39 24 4
gpt4 key购买 nike

目前,我正在生成一个列表,其中每个元素的值等于前一个元素的平方加上 Z 的值。使用generate_list生成列表后,我想检查它是否是有序列表或不是。我已经实现了ordered,然后在控制台中,我尝试执行类似ordered(generate_list(A, B, Z,[]). 的操作,它总是返回 false,即使我确信它必须是是的。我知道这种方法在 Prolog 中不好,但我不知道该怎么做......

gen(0,0,_).
gen(N,F,Z) :- X is N-1,gen(X,A,Z),F is (A*A)+Z.

generate_list(A,B,Z,[]):- A>B.
generate_list(A,B,Z,[H|T]):-
A =< B,
gen(A,H,Z),
AA is A + 1,
generate_list(AA,B,Z,T).

ordered([]).
ordered([_]).
ordered([X,Y|Z]):-X=<Y,ordered([Y|Z]).

最佳答案

我真的不明白为什么你在这里指定一个函数gen/3。您可以使用累加器,因此每次都会更新累加器,例如:

generate_list(N, Z, L) :-
generate_list(N, Z, 0, L).

generate_list(0, _, _, []).
generate_list(N, Z, A, [A|T]) :-
N > 0,
B is A*A + Z,
N1 is N-1,
generate_list(N1, Z, B, T).

例如,对于 Z1,我们得到:

?- generate_list(5, 1, L).
L = [0, 1, 2, 5, 26] ;
false.

通过问题中的 ordered/1 谓词,我们看到该列表确实是有序的:

?- generate_list(5, 1, L), ordered(L).
L = [0, 1, 2, 5, 26] ;
false.

而对于Z = -1,则不是:

?- generate_list(5, -1, L).
L = [0, -1, 0, -1, 0] ;
false.

?- generate_list(5, -1, L), ordered(L).
false.

关于prolog - 生成列表并检查值是否在增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175460/

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