Пролог: создание процедуры для печати Hello World - PullRequest
10 голосов
/ 01 апреля 2010

Я хочу загрузить это простое что-то в мой редактор:

Write:-repeat,write("hi"),nl,fail.

чтобы печаталось "привет".

Что мне делать?

Я сейчас пытаюсь сделать File->New

и сохранение файла с именем Write в E:\Program Files\pl\xpce\prolog\lib

При выполнении запроса:

-. Запись

Это печать:

1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
% 
%       >> 42 << (last release gives the question)

Почему?

Ответы [ 2 ]

8 голосов
/ 01 апреля 2010

EDIT

Я провел еще несколько исследований. По-видимому, именно это и делает 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)
?- 

UPDATE

Изменение имени на строчные буквы. Прописные буквы для переменных:

helloworld.prolog:

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.

?- 

Обратите внимание, что вы должны сначала просмотреть файл. Я попробовал это, и это точно работает.

3 голосов
/ 01 апреля 2010

Вам нужно назвать процедуру write, а не Write. Начальные буквы в верхнем регистре предназначены для переменных. (Это может быть менее запутанным, если вы называете это чем-то еще, например writeHi или чем-то, поэтому у него нет того же имени, что и у встроенной процедуры, но оно все равно будет работать, когда вы вызываете это write, потому что ваша запись имеет другую арность, чем встроенная).

Также вы можете заменить "hi" на 'hi', хотя это будет работать в любом случае (но только вторая версия фактически выведет слово hi на экран - ваша версия напечатает его как целочисленный список).

...