Prolog动态谓词的基本用法
使用此知识库 如果我运行Prolog动态谓词的基本用法,prolog,prolog-assert,Prolog,Prolog Assert,使用此知识库 如果我运行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指令),但没有子句 大多数P
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
是一个遗留/不推荐的谓词。这解释了为什么SWI Prolog没有抱怨重新定义。始终使用标准的assertz/1
谓词,而不是assert/1
assert(happy(mia)).