我刚开始学习prolog。我正在为CS 2300课程学习它。我正在努力学习基础知识。如何在我的.pl文件中添加谓词?我只是想在我的.pl文件中添加一个谓词。我这样做:
married(X,Y) :- married(Y,X).
我得到了错误:
ERROR: Undefined procedure: (:-)/2
ERROR: Rules must be loaded from a file
ERROR: See FAQ at http://www.swi-prolog.org/FAQ/ToplevelMode.tx
我应该以某种方式启用此功能吗?
这是给定的.pl
文件:
% File FAMILY.PL
% Part of a family tree expressed in Prolog
% In father/2, mother/2, and parent/2,
% first arg. is parent and second arg. is child.
father(michael,cathy).
father(michael,sharon).
father(charles_gordon,michael).
father(charles_gordon,julie).
father(charles,charles_gordon).
father(jim,melody).
father(jim,crystal).
father(elmo,jim).
father(greg,stephanie).
father(greg,danielle).
mother(melody,cathy).
mother(melody,sharon).
mother(hazel,michael).
mother(hazel,julie).
mother(eleanor,melody).
mother(eleanor,crystal).
mother(crystal,stephanie).
mother(crystal,danielle).
parent(X,Y) :- father(X,Y).
parent(X,Y) :- mother(X,Y).
答案 0 :(得分:2)
你必须在所有谓词之前使用单词谓词来编写谓词。
谓词,子句是prolog中的关键字。你也必须使用那个关键词。
您可以参考此链接查看家庭关系计划。
http://www.dailyfreecode.com/Code/prolog-find-relations-family-3025.aspx
如果你是prolog的新手。
predicates
father (symbol,symbol).
clauses
father(michael,cathy).
试试这段代码。
答案 1 :(得分:2)
这里发生的是你试图在查询提示符下输入规则。这就是你所经历的:
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.2.6)
Copyright (c) 1990-2012 University of Amsterdam, VU 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).
?- parent(X,Y) :- father(X,Y).
ERROR: Undefined procedure: (:-)/2
ERROR: Rules must be loaded from a file
ERROR: See FAQ at http://www.swi-prolog.org/FAQ/ToplevelMode.txt
?-
请注意,我和您有完全相同的错误消息。 Prolog区分查询和咨询数据库。你想做的是咨询。将所有内容放入文件并命名为family.pl
,然后执行以下操作:
?- [family].
你应该看到这个结果:
% family compiled 0.00 sec, 21 clauses
true.
?-
如果您想以交互方式输入规则和事实,请咨询“用户”,如下所示:
?- [user].
|: foo(X) :- bar(X).
|: <Ctrl-D>
% user://1 compiled 0.00 sec, 2 clauses
true.
请注意<Ctrl-D>
在按住Control键的同时键入D,而不是直接键入该文本。
至于另一个答案,它仅适用于Visual Prolog ,因此与您的问题无关。许多Prolog实施ISO标准,您可以根据输入预期它们的行为相似或相同。 SWI和GNU是一些比较流行的ISO Prolog实现。但是,Visual Prolog是完全不同的语言,不应该在传递中称为“Prolog”。