# Concepts

### @definitionlist-present <a href="#definitionlist-present" id="definitionlist-present"></a>

* no parameters
* see also: @has-definition

Returns `true` if at least one definition-list is present in the document. This function, together with `@has-definition`, allows you check whether some defined term has a definition attached to it.

{% hint style="info" %}
Note that this function will also return true when the only definition list that is currently present, happens to be a non-exhaustive definition list in which only certain terms are currently visible.
{% endhint %}

### @has-autonomous-definition <a href="#has-autonomous-definition" id="has-autonomous-definition"></a>

* first parameter: a #concept
* returns: true or false

Like `@has-definition`, but only returns true if the defined term has an “autonomous” definition assigned to it, i.e. a real definition that will separately show up in the definition list, as opposed to some regular clause that simulatenously acts as a definition.

Tip: you can easily invert the behaviour of this special function: `not(@has-autonomous-definition(#employee))` will return true if no autonomous definition is assigned to concept *employee*.

### @has-definition <a href="#has-definition" id="has-definition"></a>

* first parameter: a #concept
* returns: true or false

Returns true if the specified concept currently has any kind of definition assigned to in the document/binder (i.e., either an integrated definition or an autonomous definition).

For example, `@has-definition(#employee)` will return `true` if some definition has been assigned to concept “employee” through the terms-pane of Assemble Document. Note that this function will also return `true` when a definition has been assigned, but no definition-list is currently present in the document/binder — if this possibility exists, then you should also check for `@definitionlist-present`.

Tip: you can easily invert the behaviour of this special function: `not(@has-definition(#employee)`) will return true if no definition is assigned to concept *employee*.

### @has-integrated-definition <a href="#has-integrated-definition" id="has-integrated-definition"></a>

* first parameter: a #concept
* returns: true or false

Like `@has-definition`, but returns true if the defined term has an integrated definition assigned to it, i.e. a regular clause that contains, and simulatenously acts as, a definition — as opposed to a real definition that will separately show up in the definition list.

{% hint style="info" %}
Tip: you can easily invert the behaviour of this special function: `not(@has-integrated-definition(#employee))` will return true if no integrated definition is assigned to concept *employee*.
{% endhint %}

### @implemented <a href="#implemented" id="implemented"></a>

* parameter: `#concept` or `§cross-tag`
* returns true or false

Returns true if the specified #concept or §cross-tag is implemented in the document, i.e. if some clause is present that textually represents this concept or cross-tag. (This will technically be the case when some clause contains an “implements” link towards the concept, respectively contains that cross-tag.)

Tip: you can easily invert the behaviour of this special function: `not(@implemented(#concept))` will return true if clause is currently implementing that concept.

### @implemented-all <a href="#implemented-all" id="implemented-all"></a>

* parameters: one or more #concepts or §cross-tags
* returns `true` or `false`

Returns true if *all* of the #concepts or §cross-tags mentioned as parameters have been implemented. Returns false if @implemented is false for *any* of those.

Tip: you can easily invert the behaviour of this special function: `not(@implemented-all(#employee, #contract, #started))` will return true if any of those three concepts is not implemented by a clause.

### @implemented-any <a href="#implemented-any" id="implemented-any"></a>

* parameters: one or more #concepts or §cross-tags
* returns `true` or `false`

Returns `true` if *any* of the concepts of §cross-tags mentioned as parameters have been implemented. Returns false if `@implemented` is false for *all* of those.

Tip: you can easily invert the behaviour of this special function: `not(@implemented-any(#employee, #contract, #started))` will return true if none of those three concepts is implemented by a clause.

### @ref-if

* parameter: #concept
* returns a reference, or nothing

Returns a reference if the concept is implemented, otherwise results in nothing. Calling `@ref-if(#concept)` is largely similar to calling `{@implemented(#concept): §#concept}`, but will not result in an error message if the concept would happen to not be implemented.
