яп пролог читать предикат - PullRequest
1 голос
/ 08 октября 2010

Я экспериментирую с прологом, читая "Программирование на прологе с использованием стандарта ISO, выпуск 5". Я установил yap (еще один пролог) на мою систему Ubuntu 10.10 Maverick RC, установленную с помощью synaptic. Я запускаю пролог из emacs23, используя режим пролога.

Следующий код (из пятой главы книги) не дает результатов, как в книге:

/*   FILE   history_base.pl   */                                                    
use_module(library(lists)) /* to use member/2    */                   
event(1505,['Euclid',translated,into,'Latin']).                        
event(1510,['Reuchlin-Pfefferkorn',controversy]).                      
event(1523,['Christian','II',flies,from,'Denmark']).                        

mywhen(X,Y):-event(Y,Z),member(X,Z).

% Restoring file /usr/lib/Yap/startup
YAP version Yap-5.1.3

< reading the above file into yap>

  ?- mywhen("Denmark",D).
no

which is not what the book gives!

Now adding to the file above the line (from the book):

hello1(Event):- read(Date), event(Date,Event).

Дает эту ошибку при чтении файла в yap

(using "consult buffer" in the prolog menu in emacs):

  ?-  % reconsulting /tmp/prolcomp14814QRf.pl...    
     SYNTAX ERROR at /tmp/prolcomp14814QRf.pl, near line 3:   
 use_module( library( lists ) )                                                    
<    ==== HERE ====>                              
 event( 1505 , [ Euclid , translated , into
 , Latin ] ).
 % reconsulted /tmp/prolcomp14814QRf.pl in module user, 0 msec 752 bytes
yes
   ?- 

¿Есть комментарии?

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Возможно, вам следует завершить оператор use_module(library(lists)) с помощью . и объявить его как директиву, т.е.

1 голос
/ 08 октября 2010

Вы должны написать Данию между одинарными кавычками вместо двойных, то есть:

?- mywhen('Denmark', D).

Когда вы помещаете Данию в двойные кавычки, пролог интерпретирует ее как список кодов символов вместо атома,но в определении события он записывается как атом (между одинарными кавычками).

...