Prolog 动态谓词基本用法
Prolog Dynamic Predicates Basic Usage
使用此知识库 https://swish.swi-prolog.org
:- dynamic happy/1.
go:-
assert(happy(mia)),
write(happy(mia)).
如果我运行go.
我得到
happy(mia)
true
如果我只有
:- dynamic happy/1.
assert(happy(mia)).
和运行 happy(mia)
,我得到false
。
请问我缺少什么基本概念?
当你写:
assert(happy(mia)).
您正在(重新)定义谓词assert/1
,而不是调用谓词go/0
谓词。因此,happy(mia)
从未 添加到数据库中。查询失败,因为系统知道谓词 happy/1
(感谢 dynamic/1
指令)但没有子句。
大多数 Prolog 系统阻止重新定义标准内置谓词。但是 assert/1
是一个 legacy/deprecated 谓词。这解释了为什么 SWI-Prolog 不抱怨重新定义。始终使用标准 assertz/1
谓词而不是 assert/1
.
使用此知识库 https://swish.swi-prolog.org
:- dynamic happy/1.
go:-
assert(happy(mia)),
write(happy(mia)).
如果我运行go.
我得到
happy(mia)
true
如果我只有
:- dynamic happy/1.
assert(happy(mia)).
和运行 happy(mia)
,我得到false
。
请问我缺少什么基本概念?
当你写:
assert(happy(mia)).
您正在(重新)定义谓词assert/1
,而不是调用谓词go/0
谓词。因此,happy(mia)
从未 添加到数据库中。查询失败,因为系统知道谓词 happy/1
(感谢 dynamic/1
指令)但没有子句。
大多数 Prolog 系统阻止重新定义标准内置谓词。但是 assert/1
是一个 legacy/deprecated 谓词。这解释了为什么 SWI-Prolog 不抱怨重新定义。始终使用标准 assertz/1
谓词而不是 assert/1
.