如何将此prolog添加到我的.pl文件中?

时间:2013-09-13 04:12:31

标签: prolog predicate discrete-mathematics

我刚开始学习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).

2 个答案:

答案 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”。