2010-10-08 1 views
1

Я экспериментирую с прологом, читаю «Программирование в прологе с использованием стандарта ISO, fith edition». Я установил yap (еще один пролог) на моей ubuntu 10.10 Maverick RC-системе, установленной с помощью synaptic. Я запускаю пролог из emacs23, используя пролог-режим.yap proog read predicate

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

/* 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). 

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

(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 
    ?- 

¿Любые комментарии?

ответ

3

Может быть, вы должны прекратить use_module(library(lists)) заявления с . и объявить его в качестве директивы, то есть:

:- use_module(library(lists)).

+1

Спасибо за ответ. Я сделал, как вы сказали, и теперь пролог принимает файл без проблем. Но все равно это не работает так, как ожидалось: –

+0

Вышеупомянутый закончен слишком рано !. Он должен был продолжить: –

+0

% reconsulted /tmp/prolcomp14814QRf.pl в пользователе модуля, 0 мс 8064 байта да ? - mywhen («Дания», D). no ? - –

1

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

?- mywhen('Denmark', D). 

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

+0

Да, атомы не являются строками в Прологе, поэтому «Дания» - это не то же самое, что «Дания»; последний является синтаксическим сахаром для '[68, 101, 110, 109, 97, 114, 107]' (список кодов символов, как сказал gusbro). – sharky

 Смежные вопросы

  • Нет связанных вопросов^_^