Пролог:Создание процедуры печати Hello World
-
23-09-2019 - |
Вопрос
Я хочу загрузить это простое нечто в свой редактор:
Write:-repeat,write("hi"),nl,fail.
Чтобы он печатал «привет».
Что я должен делать?
сейчас пытаюсь сделать File->New
и сохранение файла с именем «Записать в». E:\Program Files\pl\xpce\prolog\lib
При выполнении запроса:
?-Писать.
Он печатает:
1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Почему?
Решение
РЕДАКТИРОВАТЬ
Я провел еще несколько исследований.По-видимому, именно это делает SWI-Prolog, когда вы спрашиваете его о неконкретизированной переменной.
$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- X.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
?-
ОБНОВЛЯТЬ
Изменение имени на нижний регистр работает.Прописные буквы предназначены для переменных:
приветмир.пролог:
helloworld:-write('Hello World!'),nl,fail.
Затем:
$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- ['helloworld.prolog'].
% helloworld.prolog compiled 0.00 sec, 1,376 bytes
true.
?- helloworld.
Hello World!
false.
?-
Обратите внимание, что сначала вам необходимо просмотреть файл.Я попробовал это, и это точно работает.
Другие советы
Вам нужно назвать процедуру write
, нет Write
.Начальные буквы верхнего регистра предназначены для переменных.(Может быть, будет меньше путаницы, если вы назовете это как-нибудь по-другому, например writeHi
или что-то в этом роде, поэтому оно не имеет того же имени, что и встроенная процедура, но оно все равно будет работать, когда вы его вызываете. write
потому что ваша запись имеет другую арность, чем встроенная).
Также вы можете заменить "hi"
с 'hi'
, хотя это будет работать в любом случае (но только вторая версия фактически выведет слово «привет» на экран — ваша версия выведет его как целочисленный список).