gpt4 book ai didi

Prolog 忘记/取消实例化我的变量?

转载 作者:行者123 更新时间:2023-12-01 10:05:56 28 4
gpt4 key购买 nike

我是 Prolog 的新手,我遇到了一个问题,我的变量似乎被遗忘了

test(S) :-
X = 'testing',
(S = y, write(X) );
(S = n, write(X) ).

运行

test(y)

按预期打印出文本,但是

test(n)

打印出来

_L160

我认为这意味着变量未实例化?为什么会这样?

我知道它可以把它吐成两个谓词,比如:

test(y) :- X = 'testing', write(X).
test(n) :- X = 'testing', write(X).

但我的实际问题是一个更大的谓词,不能像这样简化。

最佳答案

你的问题是;/2的优先级。如果你发出一个 listing(test/1) 你会得到这个:

 test(A) :-
( B=testing,
A=y,
write(B)
; A=n,
write(B)
).

显示解释器如何读取您的代码。

您应该将您的代码括起来以获得您想要的:

test(S) :-
X = 'testing',
((S = y, write(X) );
(S = n, write(X) )).

关于Prolog 忘记/取消实例化我的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705074/

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