8 prolog
我正在使用 SWI Prolog。我想定义一个add函数:add(X, Y)
它返回X和Y的和。但是,我不知道如何在Prolog中定义函数。我尝试使用谓词来做到这一点:
add(X, Y, Z) :- Z is X+Y.
Run Code Online (Sandbox Code Playgroud)
但是在执行以下形式的查询时,add(2, 3, X)
会出现错误:
错误:顶层:未定义的过程:add/3(DWIM 无法纠正目标)
:-
另外,我无法理解编写规则时和编写规则时的区别:=
。我在某处读到:-
用于定义谓词而:=
用于定义函数。我不确定这是否正确。我尝试使用:=
来定义函数,但它不起作用。
将自己置于与 prolog 文件相同的目录中,键入以下内容来加载并编译源文件function.pl
:
[function].
Run Code Online (Sandbox Code Playgroud)
现在测试运行(使用您在文件 function.pl 中发布的确切代码):
?- add(2,3,X).
X = 5.
Run Code Online (Sandbox Code Playgroud)
使用 Swi-prolog v 6.6.4。
另外,我在编写规则时无法理解 :- 和 := 之间的区别。我在某处读到 :- 用于定义谓词,而 := 用于定义函数。我不确定这是否正确。我尝试使用 := 来定义函数,但它不起作用。
逻辑程序是一组公理或规则(又名谓词),定义对象之间的关系,不使用显式函数的概念,但由于函数实际上只是从输入集到输出集的映射,您可以将其建模为关系,就像您对add/3
关系所做的那样。
:-
可以理解为逻辑含义(实际上我认为该符号应该看起来像向后箭头)
您所指的运算:=
符我什至无法在 swi prolog 文档中找到:搜索结果 :=。如果您可以链接到找到相关信息的位置,那就太好了。