2016-05-07 5 views
2

Я следую Prolog Tutorial, чтобы узнать Prolog.Prolog: распечатать значение переменной во время исполнения

Эта часть кода загружается factorial программа в REPL и получите результат factorial function from 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

Ничего распечатано. Так что я добавить write(var). к main: ошибка

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

ПОЛУЧАЕТЕ:

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

Как распечатать значение переменной во время выполнения?

+1

(1) Переменные должны начинаться с заглавной буквы. поэтому 'var' должен быть' Var'. (2) У вас есть период после 'factorial (10, Var)' вместо запятой. – lurker

+0

@lurker Uh ... 'Singleton variables: [Var]' – Wentao

+1

Вы не получите «одиночную переменную», предупреждающую о вас (1) измените BOTH экземпляры 'var' на' Var' и (2) используйте запятую вместо период после 'factorial (10, Var)'. Следуйте всем инструкциям. :) – lurker

ответ

0

При определении предиката не должно быть «.». за исключением случаев, когда вы заканчиваете его. Вместо этого вы должны использовать ','. правильный код будет: main: - factorial (10, Var), написать ($ Var). Также обратите внимание на переменные. В прологе вы должны ввести имена переменных в капитал, если нет, то они будут считаться предикатами. Также см., Что при использовании предиката записи для печати Var я использовал $ до Var. Если знака $ не будет, функция записи будет печатать местоположение памяти Var, а не ее значение.

Смежные вопросы