2010-03-31 14 views
8

voglio caricare questa semplice qualcosa nel mio Editor:Prolog: Effettuare una procedura per stampare Ciao Mondo

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

in modo che stampi "hi".

Cosa devo fare?

Attualmente sto cercando di fare File->New

e salvataggio di un file chiamato Scrivi sul E:\Program Files\pl\xpce\prolog\lib

Quando si esegue la query:

-Scrivere?.

E 'la stampa:

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

Perché?

+3

A proposito, quel "messaggio di errore" è un riferimento a Guida galattica per gli autostoppisti. – tloflin

+3

Lo so. Amo quei libri, ma trovo questo messaggio piuttosto stupido. È uno scherzo forzato e offuscante. – andandandand

+2

Divertente però :) –

risposta

6

EDIT

ho fatto qualche ricerca più. Apparentemente questo è ciò che fa SWI-Prolog quando lo chiedi a una variabile non definita.

$ 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

Cambiare il nome alle opere minuscole. Maiuscolo è per le variabili:

helloworld.prolog:

helloworld:-write('Hello World!'),nl,fail. 

Poi:

$ 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. 

?- 

Si noti che è necessario consultare il file prima. Ho provato questo e funziona di sicuro.

+0

Non credo, ho cambiato il programma in Scrittura: -write ("ciao") e sta facendo la stessa cosa. – andandandand

+0

OK, come posso stampare qualcosa? Voglio fare un semplice "ciao mondo". – andandandand

+0

Non è possibile avviare una procedura con una lettera maiuscola. Cambia il tuo codice in 'hello_world: -write ('hello world'), nl, fail. Notare che sto avviando la procedura con una * lettera minuscola *. –

2

È necessario denominare la procedura write, non Write. Le lettere iniziali minuscole sono per variabili. (Potrebbe essere meno confuso se lo chiami qualcos'altro come writeHi o qualcosa del genere, quindi non ha lo stesso nome di una procedura built-in, ma funzionerà comunque quando lo chiami write perché la tua scrittura ha un'arità diversa di quello costruito in uno).

Inoltre, è possibile sostituire "hi" con 'hi', sebbene funzionerà in entrambi i modi (ma solo la seconda versione stamperà effettivamente la parola hi sullo schermo - la versione verrà stampata come elenco di numeri interi).

+0

Nah, ho modificato la clausola in writehello: -write ("ciao"). e ora sta stampando: ERRORE: procedura non definita: writehello/0. Penso che il problema sia la posizione fisica in cui sto salvando la clausola. Btw, non sono sicuro, ma penso che sia più corretto chiamarlo "clausola" che "procedura". – andandandand

+0

@dmindreader: Beh, devi caricare ('consulta') il file prima di provare a richiamarlo. Ti garantisco che funziona con il nome in minuscolo. L'ho provato davvero. – sepp2k