current_predicate / 1不适用于:-动态吗?

问题描述 投票:3回答:2

我有一些在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来知道是否已运行断言(只需声明一个值)。但是,...

prolog swi-prolog prolog-directive-dynamic
2个回答
1
投票

您可以替代使用predicate_property/2内置谓词和number_of_clauses/1属性。


1
投票

:- dynamic声明是适当的,因为它将使符号在数据库中已知。然后只需在声明之前尝试匹配(使用适当的参数,在以下示例中将其忽略):

© www.soinside.com 2019 - 2024. All rights reserved.