2010-08-26 6 views
20

Mi sto strappando i capelli cercando di trovare come scrivere un programma Hello World in Prolog. Voglio solo di creare un programma che gira in questo modo:Ciao mondo in Prolog

> ./hw 
Hello, world! 
> 

Il problema è che ogni singolo esempio posso trovare opere in un REPL, in questo modo:

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

Yes 
?- hello_world. 
Hello World! 

Yes 

questo è lo stesso anche con esempi di Prolog compilato: il programma si limita a cadere in un REPL. Questo ovviamente non è molto utile per un linguaggio "generico". Quindi, come scrivo il tradizionale Hello World?

+5

Dove sono le tue virtù di programmazione dichiarativa ora? MWHAHAHA :) –

+9

Non so, penso che la maggior parte delle * real * implementazioni di Prolog in un'applicazione lo usano come linguaggio incorporato per ciò che è buono, piuttosto che scrivere l'intera app (UI, I/O file, controllo hardware, ecc. ..) in Prolog. – FrustratedWithFormsDesigner

risposta

17

utilizzando GNU Prolog:

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

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

+0

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

2

Prolog non è in realtà un indirizzo generale lingua. Lo usiamo per progettare sistemi di intelligenza artificiale all'università.

Si dovrebbe definire un fatto, che risponde "ciao mondo".

hello('hello world'). 

Poi, informarsi il fatto:

?- hello(X). 

Tuttavia, a seconda del compilatore PROLOG, probabilmente hanno una regola write(), che si potrebbe usare:

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

Questo non risponde alla domanda. È solo un'altra spiegazione su come eseguirlo in REPL. Questo è esattamente l'opposto di ciò che l'OP voleva sapere. Inoltre, l'OP ha esplicitamente dichiarato che lui è frustrato esattamente sul fatto che ci sia un milione di spiegazioni di come eseguirlo in REPL, ma nessun spiegazioni di come fargli fare esattamente ciò che si vuole che faccia, cioè la stampa di un singola stringa. –

10

Puoi scrivere il tuo file sorgente sia per avviare l'interprete Prolog sia per chiuderlo quando il tuo codice è in esecuzione. Ecco un esempio utilizzando SWI-Prolog:

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

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

Supponendo si mette questo in un file chiamato 'hw', e impostare i permessi di esecuzione, si può chiamare come si vuole:

$ ./hw 
Hello World 
$ 
+0

Ho notato che 'write (3 + 1)' stampa '3 + 1' invece di' 4'. C'è un modo per stampare l'output di espressioni aritmetiche come questa? –