Ответ 1
Когда вы вводите write(X).
в интерактивном приглашении, и ничего больше, X не привязан ни к чему в частности. Если вы хотите прочитать X от пользователя и затем записать его, попробуйте ввести read(X), write(X).
в командной строке.
?- read(X), write(X).
|: 28.
28
X = 28.
SWI Prolog сохраняет историю привязок верхнего уровня; введите help.
, чтобы перейти в руководство, затем найдите bindings
или просто перейдите к разделу 2.8 руководства "Повторное использование привязок верхнего уровня". Там вы можете узнать, что последнее значение любой переменной, связанной с успешной целью верхнего уровня, сохраняется и может быть отнесено к использованию имени переменной с префиксом знака доллара. Таким образом, возможны следующие взаимодействия:
?- read(X).
|: 42.
X = 42.
?- write($X).
42
true.
Но цель верхнего уровня, которая просто используется для использования имени переменной X, будет интерпретироваться как использование новой переменной; иначе будет нарушена нормальная семантика Prolog.