(deffunction print-args (?a?b $?c)
(printout t?a “ “?b “ and “ (length?c) “ extras: “?c
crlf))
(print-args 1 2)
(print-args a b c d)
(print-args a)
В данном примере с помощью конструктора deffunction определяется функция print-args, которая принимает два обязательных параметра:?а и?b, и имеет групповой параметр $?с. Функция выводит на экран свои обязательные параметры, а также число полей в составном параметре и его содержимое. Результат выполнения данного примера приведен на рис. 8.1.
Рис. 8.1. Результат работы функции print-args
Обратите внимание, что вызов функции с числом параметров, меньшим минимального, приводит к сообщению об ошибке.
При вызове функции интерпретатор CLIPS последовательно выполняет действия в порядке, заданном конструктором. Функция возвращает значение, равное значению, которое вернуло последнее действие или вычисленное выражение. Если последнее действие не вернуло никакого результата, то выполняемая функция также не вернет результата (как в приведенном выше примере). Если функция не выполняет никаких действий, то возвращенное значение равно false. В случае возникновения ошибки при выполнении очередного действия выполнение функции будет прервано и возвращенным значением также будет false.
Функции могут быть само- и взаимно рекурсивными. Саморекурсивная функция просто вызывает сама себя из списка своих собственных действий. В качестве примера можно привести функцию, вычисляющую факториал.