2010-03-31 17 views
8

Chcę załadować ten prosty coś w moim edytorze:Prolog: Wykonywanie procedury, aby wydrukować Hello World

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

tak, że drukuje „hi”.

Co należy zrobić?

Obecnie próbuję zrobić File->New

i zapisywanie pliku o nazwie Zapis do E:\Program Files\pl\xpce\prolog\lib

Podczas zapytania:

-Write?.

To druk:

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

Dlaczego?

+3

Nawiasem mówiąc, ten "komunikat o błędzie" jest odniesieniem do przewodnika autostopowicza do galaktyki. – tloflin

+3

Wiem. Uwielbiam te książki, ale uważam, że wiadomość jest dość głupia. To wymuszony i obraźliwy dowcip. – andandandand

+2

Śmieszne jednak :) –

Odpowiedz

6

EDIT

zrobiłem kilka badań. Najwyraźniej tak właśnie robi SWI-Prolog, gdy pytasz go o nieprzypisaną zmienną.

$ 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

Zmiana nazwy do utworów małe. Wielkie jest dla zmiennych:

helloworld.prolog:

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

Następnie:

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

?- 

Zauważ, że trzeba najpierw skonsultować plik. Wypróbowałem to i działa na pewno.

+0

Nie sądzę, zmieniłem program na Write: -write ("hi") i robi to samo. – andandandand

+0

Dobra, jak mogę wydrukować coś? Chcę zrobić prosty "cześć świat". – andandandand

+0

Nie można rozpocząć procedury od dużej litery. Zmień swój kod na 'hello_world: -write ('hello world'), nl, fail." Zauważ, że zaczynam procedurę od małej litery *. –

2

Należy podać procedurę write, a nie Write. Litery początkowe wielkich liter dotyczą zmiennych. (Może to być mniej kłopotliwe, jeśli nazwiesz to czymś innym, np. writeHi lub czymś takim, więc nie ma to tej samej nazwy co wbudowana procedura, ale nadal będzie działało, gdy ją nazwiesz write, ponieważ twój zapis ma inne przeznaczenie niż wbudowany).

Również możesz chcieć zastąpić "hi" z 'hi', chociaż zadziała to w dowolny sposób (ale tylko druga wersja faktycznie wydrukuje słowo hi na ekranie - twoja wersja wypisze to jako listę całkowitą).

+0

Nie, zmieniłem klauzulę na writehello: -write ("hi"). a teraz drukuje: BŁĄD: Nieokreślona procedura: writehello/0. Myślę, że problemem jest fizyczna lokalizacja, w której zapisuję klauzulę. Btw, nie jestem pewien, ale myślę, że bardziej poprawne jest nazywanie tego "klauzulą" niż "procedurą". – andandandand

+0

@dmindreader: Cóż, musisz załadować plik ('consult'), zanim spróbujesz go wywołać. Gwarantuję ci, że działa z małą literą. Tak naprawdę to wypróbowałem. – sepp2k