2010-03-31 15 views
8

Ich möchte diese einfach etwas in mein Editor laden:Prolog: eine Prozedur machen drucken Hallo Welt

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

also, dass sie „hallo“ druckt.

Was soll ich tun?

versuche ich derzeit File->New

und Speichern einer Datei mit dem Namen schreiben in E:\Program Files\pl\xpce\prolog\lib

zu tun, wenn die Abfrage zu tun:

-Write?.

Es ist Druck:

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

Warum?

+3

Übrigens ist diese "Fehlermeldung" ein Verweis auf Per Anhalter durch die Galaxis. – tloflin

+3

Ich weiß. Ich liebe diese Bücher, aber ich finde diese Botschaft ziemlich dumm. Es ist ein erzwungener und verschleiernder Witz. – andandandand

+2

Lustig obwohl :) –

Antwort

6

EDIT

Ich habe einige mehr Forschung. Anscheinend ist dies das, was SWI-Prolog tut, wenn Sie es nach einer uninstantiierten Variablen fragen.

$ 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

den Namen in Klein Werke ändern. Versalien ist für Variablen:

helloworld.prolog:

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

Dann:

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

?- 

Beachten Sie, dass Sie die Datei zuerst zu konsultieren. Ich habe es ausprobiert und es funktioniert mit Sicherheit.

+0

Ich glaube nicht, ich änderte das Programm zu schreiben: -write ("hi") und es macht das gleiche. – andandandand

+0

Okay, wie drucke ich irgendetwas? Ich möchte eine einfache "Hallo Welt" machen. – andandandand

+0

Sie können eine Prozedur nicht mit einem Großbuchstaben starten. Ändern Sie Ihren Code in hallo_world: -write ('Hallo Welt'), nl, fail. Beachten Sie, dass ich die Prozedur mit einem * Kleinbuchstaben * beginnen. –

2

Sie müssen die Prozedur write, nicht Write benennen. Großbuchstaben Anfangsbuchstaben sind für Variablen. (Es kann weniger verwirrend sein, wenn Sie es etwas anderes wie writeHi oder etwas nennen, also hat es nicht den gleichen Namen wie eine eingebaute Prozedur, aber es funktioniert immer noch, wenn Sie es write nennen, weil Ihr Schreiben eine andere Arität hat als der eingebaute).

Auch Sie möchten "hi" durch 'hi' ersetzen, obwohl es funktionieren wird (aber nur die zweite Version wird tatsächlich das Wort Hallo auf den Bildschirm drucken - Ihre Version wird es als Integer-Liste drucken).

+0

Nein, ich habe die Klausel in writehello geändert: -write ("hi"). und jetzt wird gedruckt: FEHLER: Nicht definierte Prozedur: writehello/0. Ich denke, das Problem ist der physische Ort, an dem ich die Klausel speichere. Übrigens bin ich mir nicht sicher, aber ich denke, es ist korrekter, es "Klausel" als "Prozedur" zu nennen. – andandandand

+0

@dmindreader: Nun, Sie müssen die Datei laden ("consult"), bevor Sie versuchen, sie aufzurufen. Ich garantiere Ihnen, dass es mit dem Kleinbuchstabennamen funktioniert. Ich habe es tatsächlich versucht. – sepp2k