Prolog: 在执行过程中打印变量的值

4

我正在按照Prolog教程来学习Prolog。

这段代码在REPL中加载factorial程序,并从What中获取factorial函数的结果。

?- ['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.

?- factorial(10,What). /* 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

没有任何输出。因此我将 main 中添加了 write(var).:

main:-
    factorial(10, var).
    write(var).

出现错误:

错误:/SomeFolder/factorial.pl:11: 无权修改静态过程“write/1”

如何在执行期间打印变量值?


2
(1) 变量必须以大写字母开头,因此 var 应该改为 Var。 (2) 在 factorial(10, Var) 后面应该是逗号而不是句号。 - lurker
@lurker 嗯...单例变量:[Var] - Rahn
1
如果你(1)将两个实例的“var”更改为“Var”,并且(2)在“factorial(10,Var)”之后使用逗号而不是句号,那么你就不会收到“singleton variable”警告。请遵循所有指示。 :) - lurker
@lurker 哦,天啊...我已经等了这么久的答案了。请把它写成一个答案。 - Rahn
1个回答

0

在定义谓词时,除非你要结束它,否则不应该使用'.',而应该使用','。正确的代码应该是- main:- factorial(10,Var), write($Var)。 还要注意变量的名称。在Prolog中,应将变量名称输入大写字母,否则它们将被视为谓词。此外,请注意在使用write谓词打印Var时,我在Var之前使用了$符号。如果没有$符号,write函数将打印Var的内存位置而不是其值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接