LINUX.ORG.RU

Вопрос по прологу


0

0

Подскажите пожалуйста, почему нижеприведенный код компилируется в Visual Prolog, но при компиляции в SWI-prolog выдает ошибки:

?- ERROR: /home/dc/c0ding/prolog/l2.pl:2:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:5:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:28:0: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:94:30: Syntax error: Operator expected
ERROR: /home/dc/c0ding/prolog/l2.pl:99:1: Syntax error: Operator expected
domains
person = symbol.
 
facts
man(person)
woman(person)
father(person, person)
mother(person, person)
husband(person, person)
wife(person, person)

predicates
 
%nondeterm 
%troyurodnaya_sestra(person, person). 
 
nondeterm 
roditel(person, person). 
 
%nondeterm 
%svodniy_brat(person, person). 
 
%nondeterm 
%sestra(person, person) 
 
clauses

man(anatoly).
man(ivan). 
man(fedor). 
man(petr). 
man(pavel). 
man(boris). 
man(anton). 
man(victor). 
man(andrey). 
man(vasiliy). 
man(sergey). 
man(georgiy). 
man(mark). 
 
woman(irina). 
woman(mariya). 
woman(vera). 
woman(larisa). 
woman(anna). 
woman(julia). 
woman(marina). 
woman(nina). 
woman(elena). 
woman(lidiya). 
woman(oksana). 
woman(yelizeta). 
woman(kristina). 

father(anatoly, fedor). 
father(anatoly, anna). 
father(anatoly, petr). 
father(ivan, pavel). 
father(ivan, nina). 
father(ivan, marina). 
father(petr, anton). 
father(petr, elena). 
father(pavel, victor). 
father(pavel, lidiya). 
father(pavel, andrey). 
father(boris, vasiliy). 
father(anton, yelizeta). 
father(andrey, kristina). 
father(andrey, sergey). 
father(vasiliy, georgiy). 
father(vasiliy, mark). 

mother(irina, fedor). 
mother(irina, petr). 
mother(irina, anna). 
mother(mariya, pavel). 
mother(mariya, marina). 
mother(mariya, nina). 
mother(vera, anton). 
mother(larisa, elena). 
mother(anna, victor). 
mother(anna, lidiya). 
mother(julia, andrey). 
mother(nina, vasiliy). 
mother(elena, sergey). 
mother(lidiya, yelizeta). 
mother(oksana, kristina). 
mother(oksana, georgiy). 
mother(oksana, mark). 


roditel(parent, child) :- 
 	mother(parent, child) or 
 	father(parent, child). 


goal 
mother(vasiliy, mark) or father(vasiliy, mark).

★★★★★

Видимо, потому, что это программа на Visual Prolog, а не на стандартном прологе.

ЕМНИП, секций (domains, facts, predicates, clauses, goal) в обычном прологе нет.

k_andy ★★★
()

А почему переменные с маленькой буквы?

roditel(parent, child) :-

mother(parent, child) or


father(parent, child).





Attila ★★
()
Ответ на: комментарий от Attila

недосмотрел, но это не ошибка.

x4DA ★★★★★
() автор топика
Ответ на: комментарий от k_andy

Да, нужно выбросить весь этот мусор. Оставить только _содержимое_ clauses. Оператора or в стандартном прологе нет, его нужно или определить через op/3, или заменить на ;/2 или переписать в виде двух правил. goal тоже лучше определить как правило и вызывать из консоли по имени, ну или есть :-/1, ?-/1.

anonymous
()

Ребята, прекратили разборки!

Как я понял их вашего интереснейшего диспута программа не от MS, а всего лишь работает под Windows. Было бы из-за чего сыр-бор городить.

hibou ★★★★★
()

Visual Prolog очень далеко ушёл от пролога. Очень жаль, что они из года в год пилят только версии под ущербную ось - как мне кажется, под Linux оно бы привлекло гораздо внимания. По крайней мере я сам бы с удовольствием пощупал, т.к. свежих идей вроде довольно много.

runtime ★★★★
()
Ответ на: комментарий от anonymous

Анонимус нужен!

Спасибо, вам анонимус.

x4DA ★★★★★
() автор топика

>roditel

parent

По теме ничего не могу сказать, но сочетание странное :)

ratatosk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.