gpt4 book ai didi

prolog - 结果没有保存在 prolog 变量上

转载 作者:行者123 更新时间:2023-12-01 13:17:45 27 4
gpt4 key购买 nike

我有以下序言函数

range(Floor, Ceil, _) :- Ceil2 is Ceil+1, range(Floor, Ceil2, [], Floor).
range(_, Ceil, L, Ceil):- write(L), !.
range(Floor, Ceil, L, Cnter):- concatenate(L, [Cnter], L2), Cnter2 is Cnter + 1, range(Floor, Ceil, L2, Cnter2).

我想获取 floor 和 ceil 之间所有数字的列表,我可以让它工作,但它只打印出列表,不会将其作为查询的解决方案返回。

预期输出为:范围(2,7,R)=> R = [2,3,4,5,6,7]

相反我得到范围 (2,7,R) => [2,3,4,5,6,7] ;是的。

列表仅作为函数的一部分打印出来。

我怀疑我仍在以一种迭代的方式思考,这是我问题的根源。

编辑以添加连接功能

 concatenate([], L, L).
concatenate([X|Y], L1, [X|L2]) :- concatenate(Y, L1, L2).

在@coder 的帮助下解决

rank(Ceil, Ceil, []).
rank(Floor, Ceil, [Floor|R2]):- Floor2 is Floor + 1, range(Floor2, Ceil, R2), !.

最佳答案

你只需要稍微改变一下 range/4 谓词:

range(Floor, Ceil, R) :- Ceil2 is Ceil+1, range(Floor, Ceil2, R, Floor).
range(_, Ceil, [], Ceil).
range(Floor, Ceil, [Cnter|L], Cnter):-
Cnter2 is Cnter + 1, range(Floor, Ceil, L, Cnter2)

关于prolog - 结果没有保存在 prolog 变量上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110099/

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