2016-05-07 4 views
2

私はProlog Tutorialの後にPrologを学びます。Prolog:実行中に変数の値を出力します

このコードは、factorialプログラムをREPLにロードし、factorialの結果をWhatから取得します。

?- ['factorial.pl']. /* 1. Load a program from a local file*/

true. 

?- listing(factorial/2). /* 2. List program to the screen*/

factorial(0,1). 

factorial(A,B) :- 
      A > 0, 
      C is A-1, 
      factorial(C,D), 
      B is A*D. 

>true. 

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

何も印刷されません。だから私はmainwrite(var).を追加します。

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

は、エラーを取得する:

ERROR: /SomeFolder/factorial.pl:11: No permission to modify static procedure `write/1'

は、私は、実行時に変数の値をプリントアウトするにはどうすればよいですか?

+1

(1)変数は大文字で始まります。 'var'は' Var'でなければなりません。 (2)コンマではなく、階乗(10、Var)の後にピリオドがあります。 – lurker

+0

@lurker Uh ... 'シングルトン変数:[Var]' – Wentao

+1

(1)インスタンスを 'var 'から' Var'に変更し、(2)代わりにカンマを使用する'factorial(10、Var)'の後のピリオド。すべての指示に従ってください。 :) – lurker

答えて

0

述部を定義するときに、 '。'があってはなりません。あなたがそれを終了している場合を除いて。代わりに '、'を使用してください。 正しいコードは メイン: - 階乗(10、変動)、 書込み($変動)です。 変数にも注意してください。プロローグでは、変数の名前を大文字で入力する必要があります。そうでない場合は、述語とみなされます。また、Varを出力するために書き込み述語を使用している間は、Varの前に$を使用しています。 $記号がそこになければ、書き込み関数はその値ではなくVarのメモリ位置を出力します。

関連する問題