2010-08-26 16 views
20

Ich reiße mir die Haare aus und versuche herauszufinden, wie man in Prolog einfach ein Hello World Programm schreibt. Ich möchte nur ein Programm erstellen, wie läuft so:Hallo Welt in Prolog

> ./hw 
Hello, world! 
> 

Das Problem ist, dass jedes einzelne Beispiel I Arbeiten in einem REPL finden kann, etwa so:

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

Yes 
?- hello_world. 
Hello World! 

Yes 

Dies ist das gleiche auch mit Beispiele für kompiliertes Prolog: Das Programm fällt immer noch in eine REPL. Dies ist offensichtlich nicht viel für eine "allgemeine" Sprache. Also, wie schreibe ich die traditionelle Hallo Welt?

+5

Wo jetzt Ihre Tugenden deklarative Programmierung sind? MWHAHAHA :) –

+9

Ich weiß nicht, ich denke die meisten * real * Implementierungen von Prolog in einer Anwendung verwenden es als eine eingebettete Sprache für das, was es gut ist, anstatt die gesamte App (UI, Datei I/O, Hardware-Steuerung usw.) zu schreiben. ..) in Prolog. – FrustratedWithFormsDesigner

Antwort

17

Mit GNU Prolog:

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

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

+0

FYI, Gleiches in [SWI-Prolog] (http://www.swi-prolog.org/pldoc/man?predicate=initialization/1) –

2

Prolog ist nicht wirklich ein Allzweck Sprache. Wir verwenden es, um künstliche Intelligenz-Systeme an der Universität zu entwerfen.

Sie müssten eine Tatsache definieren, die "Hallo Welt" antwortet.

hello('hello world'). 

Dann fragt die Tatsache:

?- hello(X). 

jedoch in Abhängigkeit von den Prolog-Compiler, haben Sie wahrscheinlich eine write() haben in der Regel, dass Sie nutzen könnten:

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

Dies beantwortet die Frage nicht. Es ist nur eine weitere Erklärung, wie es in REPL ausgeführt wird. Dies ist genau das Gegenteil dessen, was das OP wissen wollte. Darüber hinaus hat das OP ausdrücklich erklärt, dass er genau darüber frustriert ist, dass es eine Million Erklärungen gibt, wie es in REPL laufen soll, aber keine Erklärungen, wie es genau das machen kann, was man will, nämlich das Drucken eines einzelne Zeichenfolge. –

10

Sie können Ihre Quelldatei schreiben, um sowohl den Prolog-Interpreter zu starten als auch ihn zu beenden, wenn der Code ausgeführt wurde. Hier ist ein Beispiel unter Verwendung von SWI-Prolog:

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

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

Angenommen, Sie dies in einer Datei mit dem Namen ‚hw‘, und stellen Sie die ausführbare Erlaubnis, man kann es nennen, wie Sie wollen:

$ ./hw 
Hello World 
$ 
+0

Ich bemerke, dass 'write (3 + 1)' '3 + 1' anstelle von' 4' druckt. Gibt es eine Möglichkeit, die Ausgabe von arithmetischen Ausdrücken wie dieser zu drucken? –