我在使用SWI-Prolog中内置的round/1
和floor/1
时遇到了问题。当在我的代码中使用它们时,它们不被识别,并且当它们作为查询提交时;例如?- round(1.6).
,Prolog会告诉我该过程不被识别。我做错了什么吗?我在在线的Swish版本和我自己的windows安装版本上都试过了,但在这两个版本上都遇到了同样的错误。
发布于 2017-09-30 18:49:51
round/1
floor/1
和不是内置谓词, 和是。
Prolog使用谓词。这意味着谓词只能是true
或false
(或error)。此外,它还可以统一变量(进一步)。
因此,计算floor
为1.6的唯一方法是使用两个变量,并将第二个变量设为第一个变量的底数。例如:
?- round(1.6,X).
X = 2.
?- floor(1.6,X).
X = 1.
因为以这种方式编写谓词有时会很麻烦。Prolog定义了一些函子,这些函子可以用is/2
谓词来解释。round/1
和floor/1
是在is/2
谓词中具有语义的函数器:
?- X is round(1.6).
X = 2.
?- X is floor(1.6).
X = 1.
is
还可以使用更高级的表达式树,例如:
?- X is floor(0.4+0.4+0.4).
X = 1.
但请注意,is
实际上也是一个谓词。我们已经写过:
is(X, floor(0.4+0.4+0.4)).
在幕后,is/2
谓词将调用floor/2
。但是,请注意,您不能以这种方式简单地注入您自己的谓词。您不能简单地编写is(X, foo(2))
并期望Prolog调用foo(2.X)
。
https://stackoverflow.com/questions/46505809
复制相似问题