LISP - Функции

Функция - это группа операторов, которые вместе выполняют задачу.

Вы можете разделить свой код на отдельные функции. Как разделить код между различными функциями - решать вам, но логически разделение обычно таково, что каждая функция выполняет определенную задачу.

Определение функций в LISP

Макрос с именем defunиспользуется для определения функций. Вdefun макросу нужны три аргумента -

  • Название функции
  • Параметры функции
  • Тело функции

Синтаксис для defun -

(defun name (parameter-list) "Optional documentation string." body)

Проиллюстрируем концепцию простыми примерами.

Пример 1

Напишем функцию с именем averagenum, которая будет печатать среднее четырех чисел. Мы отправим эти числа в качестве параметров.

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(defun averagenum (n1 n2 n3 n4)
   (/ ( + n1 n2 n3 n4) 4)
)
(write(averagenum 10 20 30 40))

Когда вы выполняете код, он возвращает следующий результат -

25

Пример 2

Давайте определим и вызовем функцию, которая будет вычислять площадь круга, если в качестве аргумента указан радиус круга.

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(defun area-circle(rad)
   "Calculates area of a circle with given radius"
   (terpri)
   (format t "Radius: ~5f" rad)
   (format t "~%Area: ~10f" (* 3.141592 rad rad))
)
(area-circle 10)

Когда вы выполняете код, он возвращает следующий результат -

Radius:  10.0
Area:   314.1592

Обратите внимание, что -

  • В качестве параметров можно указать пустой список, что означает, что функция не принимает аргументов, список пуст и записывается как ().

  • LISP также допускает необязательные, множественные и ключевые аргументы.

  • Строка документации описывает назначение функции. Он связан с именем функции и может быть получен с помощьюdocumentation функция.

  • Тело функции может состоять из любого количества выражений Лиспа.

  • Значение последнего выражения в теле возвращается как значение функции.

  • Вы также можете вернуть значение из функции, используя return-from специальный оператор.

Обсудим кратко изложенные выше концепции. Щелкните следующие ссылки, чтобы узнать подробности -

  • Дополнительные параметры

  • Остальные параметры

  • Параметры ключевого слова

  • Возврат значений из функции

  • Лямбда-функции

  • Функции отображения