用Prolog编写函数

用Prolog编写函数,prolog,Prolog,我正在与SWI Prolog合作。我想定义一个add函数:add(X,Y),它返回X和Y的和。但是,我不知道如何在Prolog中定义函数。我尝试使用谓词这样做: add(X, Y, Z) :- Z is X+Y. 但在执行add(2,3,X)形式的查询时,会出现一个错误,说明: 错误:顶层:未定义的过程:添加/3(DWIM无法更正目标) 此外,在编写规则时,我无法理解:-和:=之间的区别。我在某个地方读到,:-用于定义谓词,而:=用于定义函数。我不确定这是否正确。我尝试使用:=来定义函数,但它

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

add(X, Y, Z) :- Z is X+Y.
但在执行
add(2,3,X)
形式的查询时,会出现一个错误,说明:

错误:顶层:未定义的过程:添加/3(DWIM无法更正目标)


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

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

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

使用Swi prolog v 6.6.4

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

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

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


您所指的
:=
运算符我甚至在swi prolog文档中找不到:。如果你能链接到你找到有关它的信息的地方,那就太好了。

要给出我认为OP想要的最简单的答案:

在swipl/gprolog提示符下:

?- [user]. add(X, Y, Z) :- Z is X+Y. [control-D] ?- add(2,3,Answer). Answer = 5 ?-[用户]。 加(X,Y,Z):-Z是X+Y。 [对照-D] ?-添加(2,3,答案)。 答案=5 说明:


Prolog可以追溯到20世纪80年代的逻辑辉煌时期,是围绕命令行设计的。在命令提示符下输入“[foo]”表示“查阅文件foo”,即从名为“foo.pl”的文件中的当前目录加载Prolog程序。“[user]”的操作与此完全相同,只是“user”是一个保留的文件名,表示用户在点击Control-D(通常表示文件结尾的字符)之前键入的内容

是否可以在Prolog“REPL”中定义函数而不首先将其放入文件中?是的,但这取决于您使用的是哪个Prolog发行版。对于SWI Prolog,您可以使用本页标题“我可以从顶层添加规则和事实吗?”下描述的方法:我可以从顶层添加规则和事实吗? ?- [user]. add(X, Y, Z) :- Z is X+Y. [control-D] ?- add(2,3,Answer). Answer = 5