如何在prolog中定义谓词

时间:2009-12-03 23:42:50

标签: prolog

我是Prolog的新手,到目前为止我已经学会了如何在文件中定义谓词并运行解释器来使用它。但我想知道是否有一种方法可以在? - 提示符下定义谓词,这样我就不必来回切换。

我现在这样做的方式就像这样

文件defs.pl:

adjacent(1,2).
adjacent(1,3).

在prolog翻译中:

?- consult('defs.pl').
% defs.pl compiled 0.00 sec, 122 bytes
true.
?- adjacent(1,2).
true.

EDIT 也许我的意思是如何定义'事实'我不确定。

2 个答案:

答案 0 :(得分:12)

您可以使用assert/1谓词:

?- assert(adjacent(1,4)).
true

编辑: 顺便说一句,如果您尝试将其与文件中定义的谓词组合,则无法使用。 因此,要么在文件中定义所有相邻的/ 2谓词,请在命令行中使用assert将它们全部定义。

如果您确实要在文件中定义某些谓词,而其他谓词定义为assert,则在文件中声明谓词是动态的:

% file contents
:- dynamic(adjacent/2).
adjacent(1,2).
adjacent(1,3).

答案 1 :(得分:4)

你可以做到

?- consult(user).

?- [user].

然后输入子句,然后用文件末尾字符终止输入(在Linux中为Ctrl-D,在MS-Windows中可以是Ctrl-Z)。这相当于阅读文件,请参阅the documentation of consult/1

assert / 1和retract / 1用于由代码动态更改的谓词(即用于存储全局数据),而不是用于正常编程。