“谓语”的含义是什么;简单/1“;在Prolog中(SWI Prolog)

“谓语”的含义是什么;简单/1“;在Prolog中(SWI Prolog),prolog,predicates,iso-prolog,Prolog,Predicates,Iso Prolog,我读书时遇到了问题。 我看到一个程序使用谓词“simple”(我猜simple/1)。我不知道这个谓词是什么意思,我在控制台的?-help(simple)中找不到它。 但当我在console中尝试一些查询时,它的工作原理如下: 5 ?- simple(p(x)). false. 6 ?- simple(mia). true. 7 ?- simple(Mia). true. 8 ?- simple(f(Mia)). false. 我猜这是某种谓词,用于确定参数是术语(或变量)还是复杂术语。

我读书时遇到了问题。 我看到一个程序使用谓词“simple”(我猜
simple/1
)。我不知道这个谓词是什么意思,我在控制台的
?-help(simple)
中找不到它。 但当我在console中尝试一些查询时,它的工作原理如下:

5 ?- simple(p(x)).
false.

6 ?- simple(mia).
true.

7 ?- simple(Mia).
true.

8 ?- simple(f(Mia)).
false.
我猜这是某种谓词,用于确定参数是术语(或变量)还是复杂术语。

具有以下定义:

simple(@Term)是semidet 术语是原子或变量

定义在quintus prolog兼容性库中;在本章中,定义为:

简单(+术语)

术语当前实例化为原子、数字或数据库 或者一个变量


在任何情况下,如果参数是一个简单的术语(不确定quintus手册中的数据库是什么意思;我猜可能是ODBC连接的处理程序),则simple/1为真。

转换为ISO谓词:

simple(T) :- var(T) ; atomic(T).

var/1它是最基本的元编程设备,因为如果不实例化变量,就不可能对任何子句进行谓词(即执行代码、绑定变量),很多时候,这是我们感兴趣的基本部分。

一般来说,像
simple/1
这样的定义没有多大帮助,因为它将两个级别的测试合并到一个谓词中。@false:你的意思是分离引入了一个无用的选择点吗?我不知道什么是“测试级别”…当您编写显式依赖于参数实例化的谓词时,最好将实例化
var(X)
nonvar(X)
的测试与其他测试分开。特别是,明确处理这两种情况是一个好主意。否则,很难对谓词进行推理<代码>简单/1混合了两种级别。顺便说一句,
atom/1
integer/1
等也可以这样做。但是,如果您以前做过
var
/
nonvar
测试,它们的问题就少了。