num(N) :- No=N, write(No), nl.
check(S) :- No==S -> write(Ok) ; write(Not ok).
当我调用num(5)
时,它会打印5.但是在调用num(5)
之后,当我调用check(5)
时,它会打印不正常。我认为它是因为变量的范围。我怎么能让它工作,我的意思是变量不像一个全局变量,所以我可以在其他条款中检查它的值?
答案 0 :(得分:3)
您可以使用swipl的global variables或断言/撤消
然而,使用全局变量有点违反声明性编程范例,因为它违反了引用透明度
答案 1 :(得分:1)
Prolog中没有全局变量。如果您需要所有子句中的变量,请将其作为参数传递给这些子句。例如,您使用:
check(S, N0) :- N0==S -> write('Ok') ; write('Not ok').
并根据需要致电check(5, 5)
或check(S, 5)
。