Prolog: Fare un procedimento per stampare Ciao Mondo
-
23-09-2019 - |
Domanda
voglio caricare questa semplice qualcosa nel mio Editor:
Write:-repeat,write("hi"),nl,fail.
In modo che la stampa "hi".
Che cosa devo fare?
Al momento sto cercando di fare File->New
e salvataggio di un file chiamato scrittura in E:\Program Files\pl\xpce\prolog\lib
Quando si esegue la query:
-?. Write
E 'la stampa:
1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Perché?
Soluzione
Modifica
Ho fatto qualche ricerca più. A quanto pare questo è ciò che SWI-Prolog fa quando si chiede che su una variabile non istanziato.
$ 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)
?-
Aggiorna
La modifica del nome alle opere minuscole. Maiuscolo è per le variabili:
helloworld.prolog:
helloworld:-write('Hello World!'),nl,fail.
Quindi:
$ 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 fuori e funziona di sicuro.
Altri suggerimenti
È necessario dare un nome al write
procedimento, non Write
. lettere maiuscole di partenza sono per le variabili. (Potrebbe essere meno confusione se lo si chiama qualcos'altro come writeHi
o qualcosa, in modo da non avere lo stesso nome di una procedura di built-in, ma continuerà a funzionare quando si chiama write
perché la vostra scrittura ha un diverso arity rispetto al costruito in uno).
Inoltre si potrebbe desiderare di sostituire "hi"
con 'hi'
, anche se funziona in entrambi i casi (ma solo la seconda versione sarà effettivamente stampare la parola hi allo schermo - la versione stamperà come un elenco intero)