“谓语”的含义是什么;简单/1“;在Prolog中(SWI Prolog)
我读书时遇到了问题。 我看到一个程序使用谓词“simple”(我猜“谓语”的含义是什么;简单/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/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
测试,它们的问题就少了。