Logtalk reference manual
Built-in predicate: create_category/4
Contents > Reference Manual > Built-in Predicates > create_category/4

## create_category/4

#### Description

    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.

When using Logtalk multi-threading features, predicates calling this built-in predicate may need to be declared synchronized in order to avoid race conditions.

#### Template and modes

    create_category(?category_identifier, +list, +list, +list)

#### Errors

Relations, Directives, or Clauses is a variable:
  `instantiation_error`
Identifier is neither a variable nor a valid category identifier:
  `type_error(category_identifier, Identifier)`
Identifier is already in use:
  `permission_error(replace, category, Identifier)`
  `permission_error(replace, object, Identifier)`
  `permission_error(replace, protocol, Identifier)`
Relations is neither a variable nor a proper list:
  `type_error(list, Relations)`
Directives is neither a variable nor a proper list:
  `type_error(list, Directives)`
Clauses is neither a variable nor a proper list:
  `type_error(list, Clauses)`

#### Examples

    | ?- create_category(
            tolerances,
            [implements(comparing)],
            [],
            [epsilon(1e-15), (equal(X, Y) :- epsilon(E), abs(X-Y) =< E)]
         ).