用Prolog编写函数
我正在与SWI Prolog合作。我想定义一个add函数:用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无法更正目标) 此外,在编写规则时,我无法理解:-和:=之间的区别。我在某个地方读到,:-用于定义谓词,而:=用于定义函数。我不确定这是否正确。我尝试使用:=来定义函数,但它
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