在Prolog中编写函数

时间:2016-11-26 18:27:09

标签: prolog

我正在与SWI Prolog合作。我希望定义一个add函数:add(X, Y),它返回X和Y的总和。但是,我不知道如何在Prolog中定义函数。我尝试使用谓词这样做:

add(X, Y, Z) :- Z is X+Y.

但是在执行add(2, 3, X)形式的查询时,会出错:

  

错误:顶级:未定义的程序:添加/ 3(DWIM无法纠正目标)

另外,在编写规则时,我无法理解:-:=之间的区别。我在某处读到:-用于定义谓词,而:=用于定义函数。我不确定这是否正确。我尝试使用:=来定义函数,但它不起作用。

2 个答案:

答案 0 :(得分:2)

将自己放在与prolog文件相同的目录中,键入以下内容以加载和编译源文件function.pl

[function].

现在测试运行(使用您在文件function.pl中发布的确切代码):

?- add(2,3,X).
X = 5.

使用Swi-prolog v 6.6.4。

  

另外,我无法理解: - 和:= while之间的区别   写规则。我在某处读到: - 用于定义谓词   while:=用于定义函数。我不确定这是不是   正确。我尝试使用:=来定义函数,但它不起作用。

逻辑程序是一组公理或规则(又称谓词),定义了对象之间的关系,不使用显式函数的概念,但由于函数实际上只是从输入集到输出的映射 - 设置你可以将它建模为关系,就像你使用add/3关系一样。

:-可以被理解为逻辑含义(实际上我认为该符号应该看起来像向后箭头)

您所指的:=运算符我甚至无法在swi prolog文档中找到:search results for :=。如果您可以链接到您找到相关信息的位置,那就太棒了。

答案 1 :(得分:0)

要给出最简单的答案,我认为OP正在寻找:

在swipl / gprolog提示符下:

?- [user].
add(X, Y, Z) :- Z is X+Y.
[control-D]

?- add(2,3,Answer).
Answer = 5

说明:

Prolog的历史可以追溯到1980年代,当时它是围绕命令行而设计的。输入“ [foo]”。在命令提示符处(?-)表示``请咨询文件foo'',即从当前目录中将Prolog程序加载到名为``foo.pl''的文件中。 “ [user]”执行的操作完全相同,只是“ user”是保留的文件名,这表示用户键入内容,直到他们按下Control-D(代表文件结尾的通常字符)为止。