create_category(Identifier, Relations, Directives, Clauses)
Creates a new, dynamic category. This predicate is often used as a primitive to implement high-level category creation methods.
Note that, when opting for runtime generated category identifiers, it's possible to run out of identifiers when using a back-end Prolog compiler with bounded integer support. The portable solution, when creating a large number of dynamic category in long running applications, is to recycle, whenever possible, the identifiers.
When using Logtalk multi-threading features, predicates calling this built-in predicate may need to be declared synchronized in order to avoid race conditions.
create_category(?category_identifier, +list, +list, +list)
instantiation_errortype_error(category_identifier, Identifier)permission_error(replace, category, Identifier)permission_error(replace, object, Identifier)permission_error(replace, protocol, Identifier)type_error(list, Relations)type_error(list, Directives)type_error(list, Clauses)| ?- create_category(
tolerances,
[implements(comparing)],
[],
[epsilon(1e-15), (equal(X, Y) :- epsilon(E), abs(X-Y) =< E)]
).
abolish_category/1, category_property/2, current_category/1
complements_object/2, extends_category/2-3, imports_category/2-3