gpt4 book ai didi

prolog - 断言和收回以模拟全局变量

转载 作者:行者123 更新时间:2023-12-04 02:21:44 25 4
gpt4 key购买 nike

我这样做是为了模拟全局变量:

update_queue(NewItem) :-
global_queue(Q),
retractall(global_queue(Q)),
append(Q, [NewItem], NewQ),
assert(global_queue(NewQ)).

还有别的办法吗? (除了将变量作为参数传递之外)。不一定更有效率,我只是好奇。

最佳答案

在 SWI-Prolog 中,还有 nb_setval/2 和 b_setval/2(以及相应的“_getval/2”)。使用 time/1 看看这是否更有效率。还有关于队列表示的评论:如果您将初始队列表示为一对变量 Q-Q,您可以在常数时间内附加一个元素:

insert_q0_q(E, Q-[E|Rest], Q-Rest).

也就是说,您通过进一步实例化尾部(即对中的第二个元素)将元素 E 添加到队列中,新尾部又是一个自由变量。我把从前面(也是在恒定时间内)删除一个元素作为练习;提示:当 pair 的第一个元素是变量时,此表示中的队列为空。通常,全局变量会使调试变得相当复杂,因为您无法单独测试谓词。作为将队列作为参数传递(您已经提到)的替代方法,请考虑使用 DCG 表示法将其隐式线程化。这通常会使代码更具可读性,尤其是当只有一小部分谓词需要访问“全局”参数时。

关于prolog - 断言和收回以模拟全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759023/

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