Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Определение функций в ЛИСПе






В языке ЛИСП предусмотрено более чем триста встроенных функций, подобных базовым. Но независимо от их количества всегда возникает необходимость в новых функциях, определенных пользователем. Назначить имя и определить новую функцию можно с помощью специальной формы DEFUN (define function). Конструкция DEFUN имеет следующую структуру

(DEFUN < имя функции> (список формальных параметров)

< тело функции>

)

Тело функции состоит из одного или нескольких последовательных s-выражений (заданий). Описание функции должно всегда предшествовать обращению к ней (вызову). Так, функция, которая проверяет, является ли данный объект пустым списком, может быть определена так

(DEFUN NULL (obj)

(EQL obj NIL)

)

Ее вызов имеет вид

(NULL ‘(a b c d)) F (NULL (CDR ‘(f))) T

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

Если задание является атомом или его первый элемент является атомом, то такая задача называется простой. Например,

(CONS 'NR LST).

Если первый элемент списка, который описывает задание, не является атомом, то такое задание называется условным. Например,

((ATOM lst) (CONS expr lst)).

В условном задании первый элемент списка обязательно является предикатом. Если значение предикату NIL, то значение задания становится равным NIL и Лисп переходит к выполнению следующего задания. Если предикат возвращает не NIL, происходит выполнение хвоста списка задания, а другие задания игнорируются. Если предикат возвращает Т, а хвост задания пустой, то результатом всей функции будет T.

Например,

(defun max-min (l)

((atom l) 0)

(setq a (max l))

(setq b (min l))

(- a b)

)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.