Prolog:在执行期间打印出变量的值

时间:2016-05-07 14:31:30

标签: prolog factorial

我跟随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'

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

1 个答案:

答案 0 :(得分:0)

在定义谓词时,不应该成为'。'除了当你结束它。你应该使用','代替。 正确的代码是 - 主要:-      阶乘(10,VAR),      写($ VAR)。 还要注意变量。在prolog中你应该在大写字母中键入变量的名称,如果没有,那么它们将被视为谓词。另外看到使用write predicate打印Var时,我在Var之前使用了$。如果$符号不在那里,写函数将打印Var的内存位置而不是其值