2010-03-31 29 views
8

Tôi muốn tải một cái gì đó đơn giản này thành biên tập của tôi:Prolog: Làm một thủ tục để in Hello World

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

Vì vậy mà nó in "hi".

Tôi nên làm gì?

tôi đang cố gắng để làm File->New

và lưu một file có tên Viết vào E:\Program Files\pl\xpce\prolog\lib

Khi làm các truy vấn:

-Viết?.

Đó là in ấn:

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

Tại sao?

+3

Nhân tiện, "thông báo lỗi" đó là một tham chiếu đến Hướng dẫn của người dẫn đường đến thiên hà. – tloflin

+3

Tôi biết. Tôi thích những cuốn sách đó, nhưng tôi thấy thông điệp đó khá ngu ngốc. Đó là một trò đùa cưỡng bức và khó hiểu. – andandandand

+2

Hài hước mặc dù :) –

Trả lời

6

EDIT

tôi đã làm một số nghiên cứu thêm. Rõ ràng đây là những gì SWI-Prolog làm khi bạn hỏi nó về một biến không được khai thác.

$ 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) 
?- 

CẬP NHẬT

Thay đổi tên các tác phẩm chữ thường. Hoa là cho các biến:

helloworld.prolog:

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

Sau đó:

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

?- 

Chú ý rằng bạn phải tham khảo ý kiến ​​các tập tin đầu tiên. Tôi đã thử điều này và nó hoạt động chắc chắn.

+0

Tôi không nghĩ như vậy, tôi đã thay đổi chương trình để Viết: -write ("hi") và nó làm điều tương tự. – andandandand

+0

Được rồi, làm cách nào để in mọi thứ? Tôi muốn làm một "hello world" đơn giản. – andandandand

+0

Bạn không thể bắt đầu một thủ tục với một chữ hoa. Thay đổi mã của bạn thành 'hello_world: -write ('hello world'), nl, failed.' Lưu ý rằng tôi đang bắt đầu quy trình với một ký tự * chữ thường *. –

2

Bạn cần nêu tên thủ tục write, không phải Write. Chữ cái viết hoa chữ thường là các biến. (Nó có thể ít gây nhầm lẫn nếu bạn gọi nó là một cái gì đó khác như writeHi hoặc một cái gì đó, vì vậy nó không có tên giống như một thủ tục dựng sẵn, nhưng nó vẫn hoạt động khi bạn gọi nó là write bởi vì viết của bạn có một sự khác biệt hơn được xây dựng trong một). Ngoài ra, bạn có thể muốn thay thế "hi" bằng 'hi', mặc dù nó sẽ hoạt động theo cách (nhưng chỉ có phiên bản thứ hai thực sự sẽ in chữ hi thành màn hình - phiên bản của bạn sẽ in ra dưới dạng danh sách số nguyên).

+0

Không, tôi đã thay đổi điều khoản thành writehello: -write ("hi"). và bây giờ nó đang in: L ERI: Thủ tục không xác định: writehello/0. Tôi nghĩ rằng vấn đề là vị trí thực tế nơi tôi đang tiết kiệm khoản. Btw, tôi không chắc chắn nhưng tôi nghĩ rằng nó là chính xác hơn để gọi nó là "khoản" hơn "thủ tục". – andandandand

+0

@dmindreader: Vâng, bạn phải tải ('consult') tập tin trước khi bạn cố gắng gọi nó. Tôi đảm bảo với bạn rằng nó hoạt động với tên trường hợp thấp hơn. Tôi thực sự đã thử nó. – sepp2k