Конструктор deffunction
Конструктор deffunction позволяет объявлять в памяти новые функции, так же, как конструктор defglobal объявляет переменные. Для функции всегда должны быть определены уникальное имя, набор аргументов и действия, которые она выполняет. В упрощённом варианте синтаксис конструктора выглядит так:
(deffunction <имя функции> (<аргумент>*)
Имя функции указывается в формате symbol, аргументы функции перечисляются в круглых скобках, отделяются пробелом и начинаются с символа?. Действием может быть условный оператор, цикл, выражение или другая функция. Если во время выполнения функции, определённой конструктором deffunction, происходит ошибка, она возвращает символьное значение FALSE.
Рисунок 7.1 – пример написания простой функции
На рисунке 7.1 конструктор deffunction определяет функцию Printer, аргументами которой являются внутренние переменные?a,?b,?c. Сначала bind присваивает переменной?a значение суммы переменных?b и?c. После этого функция if проверяет при помощи выражения (>?a (*?b?b)), является ли переменная?a больше переменной?b, умноженной на саму себя, и выводит соответствующее сообщение на экран. При первом вызове написанной функции ей задаются аргументы 3,4,5, при втором вызове -4, -5, -5. При третьем вызове функции задаются аргументы 5,6, и аргумент символьного типа a. Аргументу символьного типа не может быть присвоено целочисленное значение, поэтому функция завершается сообщением об ошибке и возвращает значение FALSE.
На рисунке 7.2 определена функция с именем Factorial, аргументами которой являются внутренние переменные?num и?result. В начале запускается функция bind, которая задаёт внутренней переменной?result значение 1. После этого запускается арифметический цикл, начальным параметром которого является переменная?i (ей автоматически присваивается значение 1). Конечным параметром цикла является переменная?num, которая хранит число, факториал которого нужно получить. Цикл каждую итерацию перемножает переменную?result и переменную цикла?i, присваивая переменной?result новое значение с помощью bind. После этого функция выводит число и его факториал (рисунок 7.3):
|