我跟随Prolog Tutorial学习Prolog。
这段代码在REPL中加载factorial
程序,并从factorial
获取What
函数的结果。
? - [' factorial.pl']。 / * 1.从本地文件加载程序* /
true.
? - 列表(factorial / 2)。 / * 2.将程序列入屏幕* /
factorial(0,1).
factorial(A,B) :-
A > 0,
C is A-1,
factorial(C,D),
B is A*D.
>true.
? - 阶乘(10,什么)。 / * 3.计算阶乘10 * /
What=3628800
现在我希望在程序中打印结果并将其作为脚本执行:
factorial(0,1).
factorial(A,B) :-
A > 0,
C is A-1,
factorial(C,D),
B is A*D.
main:-
factorial(10, var).
$ swipl -q -f factorial.pl -t main
什么都没打印出来。我将write(var).
添加到main
:
main:-
factorial(10, var).
write(var).
得到错误:
错误:/SomeFolder/factorial.pl:11:无权修改静态过程`write / 1'
如何在执行期间打印出变量值?
答案 0 :(得分:0)
在定义谓词时,不应该成为'。'除了当你结束它。你应该使用','代替。 正确的代码是 - 主要:- 阶乘(10,VAR), 写($ VAR)。 还要注意变量。在prolog中你应该在大写字母中键入变量的名称,如果没有,那么它们将被视为谓词。另外看到使用write predicate打印Var时,我在Var之前使用了$。如果$符号不在那里,写函数将打印Var的内存位置而不是其值