我对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).
但我的实际问题在于一个更大的谓词,不能像这样简化。
答案 0 :(得分:3)
您的问题是;/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) )).
答案 1 :(得分:2)
分离(;)目前成功:
添加一些括号,使其按预期工作。
test(S):-
X = 'testing',
(
(S = y, write(X) )
;
(S = n, write(X) )
).
答案 2 :(得分:2)
让我为你重新缩进代码:
test(S) :-
( X = 'testing', S = y, write(X)
; S = n, write(X)
).
我希望现在更清楚你写的是什么。