2010-08-26 3 views
20

Я рву свои волосы, пытаясь найти, как просто написать программу Hello World в Prolog. Я просто хочу, чтобы создать программу, которая работает следующим образом:Привет, мир в Prolog

> ./hw 
Hello, world! 
> 

Проблема заключается в том, что каждый пример я могу найти работает в РЕПЛ, например, так:

?- consult(hello_world). 
% hello compiled 0.00 sec, 612 bytes 

Yes 
?- hello_world. 
Hello World! 

Yes 

Это то же самое, даже с примеры скомпилированного Prolog: программа все еще просто переходит в REPL. Это, очевидно, не очень полезно для «общего» языка. Итак, как мне написать традиционный Hello World?

+5

Где сейчас находятся ваши достоинства декларативного программирования? MWHAHAHA :) –

+9

Я не знаю, я думаю, что большинство * реальных * реализаций Prolog в приложении используют его как встроенный язык для чего он хорош, вместо того, чтобы писать все приложение (пользовательский интерфейс, файловый ввод-вывод, аппаратное управление и т. Д.). ..) в Прологе. – FrustratedWithFormsDesigner

ответ

17

Использование GNU Prolog:

 
$ cat hello.pl 
:- initialization(main). 
main :- write('Hello World!'), nl, halt.

$ gplc hello.pl $ ./hello
Hello World!

+0

FYI, То же самое в [SWI-Prolog] (http://www.swi-prolog.org/pldoc/man?predicate=initialization/1) –

2

Пролог на самом деле не общего назначения язык. Мы используем его для проектирования систем искусственного интеллекта в университете.

Вам нужно будет определить факт, который отвечает «привет мир».

hello('hello world'). 

Затем запросить факт:

?- hello(X). 

Однако, в зависимости от компилятора ПРОЛОГ, вы, вероятно, имеют write() правило, что вы могли бы использовать:

?- write('hello world'), nl. 
+1

Это не отвечает на вопрос. Это просто еще одно объяснение, как запустить его в REPL. Это точно противоположно тому, что хотел узнать ОП. Более того, ОП прямо заявил, что он расстроен именно по поводу того, что существует миллион объяснений того, как запустить его в REPL, но никаких объяснений о том, как сделать это делать именно то, что он хочет, а именно: распечатать одиночная строка. –

10

Вы можете написать исходный файл, чтобы запустить интерпретатор Prolog и выйти из него, когда ваш код будет запущен. Вот пример использования SWI-Пролог:

#!/usr/bin/swipl -q -t hello_world -f 

hello_world :- write('Hello World'), nl, 
       halt. 

Предполагая, что вы кладете это в файле с именем «HW» и установить разрешение на выполнение, вы можете назвать это, как вы хотите:

$ ./hw 
Hello World 
$ 
+0

Я заметил, что 'write (3 + 1)' печатает '3 + 1' вместо' 4'. Есть ли способ напечатать вывод арифметических выражений, подобных этому? –

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