gpt4 book ai didi

prolog - 谓词 nb_setarg/3 的意外结果

转载 作者:行者123 更新时间:2023-12-03 19:40:41 28 4
gpt4 key购买 nike

有谁知道谓词的原因nb_setarg/3与谓词 forall/3 一起使用时无法正常工作在 SWI-Prolog 解释器 (v. 8.2.1) 的顶层?
在顶级输入的目标中使用时如何工作:

?- 
functor(A, array, 5),
forall(arg(Index, A, _),
nb_setarg(Index, A, 0)).

A = array(_26341340, _26341342, _26341344, _26341346, _26341348).
在规则中使用时如何工作:
new_array(A,N) :- 
functor(A, array, N),
forall(
arg(Index, A, _),
nb_setarg(Index, A, 0)).
然后:
?- 
new_array(A,5).
A = array(0, 0, 0, 0, 0).

最佳答案

我认为这可能是一个错误。但这可能不是 forall/2 中的错误(只是)或 nb_setarg/3 .因为这有效:

?- A = array(_, _, _, _, _), forall(arg(Index, A, _), nb_setarg(Index, A, 0)).
A = array(0, 0, 0, 0, 0).
而你的例子没有(SWI 7.6.4):
?- functor(A, array, 5), forall(arg(Index, A, _), nb_setarg(Index, A, 0)).
A = array(_2290, _2292, _2294, _2296, _2298).

关于prolog - 谓词 nb_setarg/3 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65158752/

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