2015-11-21 3 views
1

Мы только что начали работать над Prolog в одном из моих классов программирования. Я получаю несколько ошибок, и я не совсем уверен в том, что их вызывает. Это домашнее задание, поэтому я не ожидаю никаких выписанных ответов, но любые подсказки будут оценены.Ошибка компиляции Prolog «Неопределенная ссылка на предикат»

Вот мой код:

/* Database for family. It consists of facts and rules. */ 

/* Facts */ 
male(mark). 

/* Question 1.1 */ 
male(tom). 
male(eric). 
male(josh). 
male(austin). 

/* Question 1.1 */  
female(jen). 
female(beth). 
female(lisa). 
female(alice). 
female(alex). 

father_of(mark, beth). /* mark is the father of beth */ 

/* Question 1.1 
father_of(josh, eric). 
father_of(eric, mark). 
father_of(eric, jen). 
father_of(austin, alice). 

mother_of(jen, tom). /* jen is the mother of tom */ 

/* Question 1.1 
mother_of(lisa, eric). 
mother_of(alex, alice). 
mother_of(alice, jen). 
mother_of(alice, mark). 

/* Rules */ 

is_male(X) :- 
male(X); 
father_of(X, _). 

/* Question 1.2 */ 
is_female(X) :- 
    female(X); 
    mother_of(X, _). 

/* Question 1.3 */ 
grandfather_of(X, Z) :- 
    father_of(X, Y), 
    (mother_of(Y, Z); father_of(Y, Z)). 


grandmother_of(X, Z) :- 
    mother_of(X, Y), 
    (mother_of(Y, Z); father_of(Y, Z)). 

Ошибки я получаю: /tmp/gplc0GI9tg.o: В функции `Lpred7_1' :

(.text + 0x2d1): неопределенная ссылка на predicate(mother_of/2)' /tmp/gplc0GI9tg.o: In function предикат (grandfather_of/2) ':

(.text + 0x35d): не определено ссылка на predicate(mother_of/2)' /tmp/gplc0GI9tg.o: In function предиката (grandmother_of/2)':

(.text + 0x3a8): не определено ссылка на predicate(mother_of/2)' /tmp/gplc0GI9tg.o: In function предиката (grandmother_of/2) ':

(.text + 0x3ed): не определено ссылка на `предиката (mother_of/2)' collect2: ошибка: LD возвращается 1 статус выхода компиляции не удалось

+1

Проверьте, где ваши комментарии начинаются и заканчиваются ... – Steven

+1

@Stevem Спасибо, что нашли отзыв! – Jordanthedud

ответ

2

Глядя на фрагмент кода, следующие строки ложны:

/* Question 1.1 
father_of(josh, eric). 

то же самое, но не намного позже:

/* Question 1.1 
mother_of(lisa, eric). 

Я предполагаю, что вы хотели закончить соответствующие комментарии, прежде чем записывать следующие факты.

Рекомендации: Используйте комментарии к концу строки (начиная с %) всякий раз, когда этого достаточно.

+1

спасибо тонну, не могу поверить, что я пропустил это! – Jordanthedud