我有一些在Prolog中使用断言定义的谓词。
我正在使用current_predicate/1
来知道是否已运行断言(只需声明一个值)。>>
但是,swipl
一直在抱怨:
Warning: The predicates below are not defined. If these are defined Warning: at runtime using assert/1, use :- dynamic Name/Arity. Warning: Warning: amountOfStudentsInCourseAsserted/2, which is referenced by
因此,我添加了
:- dynamic amountOfStudentsInCourseAsserted/2
,但不幸的是,这将谓词添加到了current_predicate(Predicate)。因此,如果我正在使用此动态命名,则不能再使用current_predicate/1
。
是否有另一个谓词,例如current_predicate/1
,对动态名称而言不正确?
我有一些在Prolog中使用断言定义的谓词。我使用current_predicate / 1来知道是否已运行断言(只需声明一个值)。但是,...
您可以替代使用predicate_property/2
内置谓词和number_of_clauses/1
属性。
:- dynamic
声明是适当的,因为它将使符号在数据库中已知。然后只需在声明之前尝试匹配(使用适当的参数,在以下示例中将其忽略):