prolog中的变量问题

时间:2011-06-04 10:48:35

标签: variables scope prolog global-variables

     num(N) :- No=N, write(No), nl.

     check(S) :- No==S -> write(Ok) ; write(Not ok).

当我调用num(5)时,它会打印5.但是在调用num(5)之后,当我调用check(5)时,它会打印不正常。我认为它是因为变量的范围。我怎么能让它工作,我的意思是变量不像一个全局变量,所以我可以在其他条款中检查它的值?

2 个答案:

答案 0 :(得分:3)

您可以使用swipl的global variables或断言/撤消

然而,使用全局变量有点违反声明性编程范例,因为它违反了引用透明度

答案 1 :(得分:1)

Prolog中没有全局变量。如果您需要所有子句中的变量,请将其作为参数传递给这些子句。例如,您使用:

check(S, N0) :- N0==S -> write('Ok') ; write('Not ok').

并根据需要致电check(5, 5)check(S, 5)