Function Definition

The define function definition macro provides a convenient way to define functions that have no generic properties and hence are not suitable for definition with define generic or define method. This extension has been accepted as part of the language since the DRM was published.

The define function macro provides a way of defining a function that says clearly to other programmers that the function is not part of any generic operation; furthermore, the function will not be extended as a generic function, and calling it need not involve any generic dispatch. Without this macro, programmers who wanted to do so would have to turn to define constant. With define function, programmer intent is more explicit and it relays more information to future maintainers of a piece of code.

The language definition of define function explicitly does not specify what it expands into, so that Dylan implementations have latitude to support this definer in the best way suited to the implementation.

define function Defining Macro

Defines a constant binding in the current module and initializes it to a new function.

Macro Call

define {*adjective* }* function *name* *parameter-list*
  [ *body* ]
end [ function ] [ *name* ]

  • adjective – A Dylan unreserved-name bnf.

  • name – A Dylan variable-name bnf.

  • parameter-list – A Dylan parameter-list bnf.

  • body – A Dylan body bnf.


Creates a constant module binding with the name name, and initializes it to a new function described by parameter-list, options, and any adjectives.

The adjectives permitted depend on the implementation.

The parameter-list describes the number and types of the function’s arguments and return values. It is an error to supply #next in the parameter list, and there is no implicit #next parameter.


The following functions return the same values as they would if the function had been defined as a bare method with the same signature:

Calling some of the following reflective operations on a function defined with define function may be an error: