Prolog: Faire une procédure pour imprimer Bonjour tout le monde
-
23-09-2019 - |
Question
Je veux charger cette simple quelque chose dans mon éditeur:
Write:-repeat,write("hi"),nl,fail.
Alors qu'il imprime "salut".
Que dois-je faire?
J'essaie actuellement de faire File->New
et enregistrement d'un fichier nommé Ecrire dans E:\Program Files\pl\xpce\prolog\lib
Lorsque vous effectuez la requête:
-. Ecrire
Il est l'impression:
1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Pourquoi?
La solution
EDIT
Je l'ai fait quelques recherches. Apparemment, c'est ce que SWI-Prolog fait quand vous demandez au sujet d'une variable non.
$ 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
Modification du nom des œuvres minuscules. Majuscules est pour les variables:
helloworld.prolog:
helloworld:-write('Hello World!'),nl,fail.
Alors:
$ 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.
?-
Notez que vous devez consulter d'abord le fichier. J'ai essayé cela et il fonctionne bien sûr.
Autres conseils
Vous devez nommer la procédure write
, non Write
. majuscules lettres de départ sont des variables. (Il est peut-être moins confus si vous appelez quelque chose d'autre comme writeHi
ou quelque chose, il n'a pas le même nom que d'une procédure intégrée, mais il fonctionne toujours lorsque vous l'appelez write
parce que votre écriture a un autre arity que le bâti dans une).
Aussi, vous pouvez remplacer "hi"
avec 'hi'
, mais il fonctionnera de toute façon (mais seulement la deuxième version sera effectivement imprimer le mot salut à l'écran - votre version imprimera comme une liste d'entiers)