(deffunction <имя-функции>
[<комментарии>]
<обязательные-параметры>
[<групповой-параметр>]
<действия>)
<обязательные-параметры>::= <выражение-простое-поле>
<групповой-параметр>::= <выражение-составное-поле>
Функция, создаваемая с помощью конструктора deffunction, должна иметь уникальное имя, не совпадающее с именами других внешних и внутренних функций. Функция, созданная с помощью deffunction, не может быть перегружена (см. гл. 10). Конструктор deffunction должен быть объявлен до первого использования создаваемой им функции. Исключения составляют только рекурсивные функции.
В зависимости от того, задан ли групповой параметр, функция, созданная конструктором, может принимать точное число параметров или число параметров не меньшее, чем некоторое заданное. Обязательные параметры определяют минимальное число аргументов, которое должно быть передано функции при ее вызове. В действиях функции можно ссылаться на каждый из этих параметров как на обычные переменные, содержащие простые значения. Если был задан групповой параметр, то функция может принимать любое количество аргументов большее или равное минимальному числу. Если групповой параметр не задан, то функция может принимать число аргументов точно равное числу обязательных параметров. Все аргументы функции, которые не соответствуют обязательным параметрам, группируются в одно значение составного поля. Ссылаться на это значение можно, используя символ группового параметра. Для работы с групповым параметром могут использоваться стандартные функции CLIPS, предназначенные для работы с составными полями (см. гл. 15), такие как length и nth. Определение функции может содержать только один групповой параметр.
Приведенный пример 8.1 демонстрирует описанные выше возможности работы с групповыми параметрами.