ФУНКЦИИ - часть 2
(defun sumsquare (х у) (+ (* х х) (* у у))) .
Результат: sumsquare.
Вызов (применение) этой функции:
(sumsquare 34)
Результат: 25.
Определение функции задается списком, поэтому его можно модифицировать в ходе выполнения программы. Кроме того, некоторый символ может быть и именем функции и переменной.
В Лиспе передача параметров происходит по значению. Формальные параметры функций являются статическими и локальными, т.е. действительны только внутри той формы, в которой они определены.
Основу для построения различных функций образует набор небольшого числа примитивных встроенных функций. Базовыми функциями обработки S-выражений являются функции
CAR, CDR, CONS, ATOM, EQ, EQL, =
и другие, смысл которых отражен в табл. 3.7.
Таблица 3.7
Базовые функции обработки S-выражений
Функция
|
Вызов
|
Действие
|
Пример использования
|
CAR
|
(CAR список)
|
Возвращает головною часть
|
(CAR(1 234))
|
|
|
списка - его 1-й элемент
|
Результат:1
|
CDR
|
(CDR список)
|
Возвращает хвостовую часть
|
(CDR(! 234))
|
|
|
списка- все. кроме 1-го элемента
|
Результат:(2 3 4)
|
CONS
|
(CONS S-выра-
|
Строит список из переданных в
|
(CONS I (2 3 4))
|
|
жение список)
|
качестве аргументов головы и хвоста
|
Результат: (1234)
|
ATOM
|
(ATOMS-выра-
|
Предикат; проверяет, является ли
|
(ATOM A) : t
|
|
жение)
|
аргумент атомом, и возвращает либо t
|
(ATOM (1 2 3)): Nil
|
|
|
(истина), либо Nil или ("(ложь)
|
|
EQ
|
(EQ символ
|
Предикат: проверяет тождественность
|
(EQ A A): t
|
|
символ)
|
символов-аргументов, неприменим
|
(EQ X (CAR (X Y Z))): t
|
|
|
для чисел
|
|
EQL
|
(EQL число
|
Предикат, проверяет тождественность
|
(EQL 3.0 3.0): t
|
|
число)
|
чисел одного типа
|
|
=
|
(= число
|
Предикат, проверяет тождественность
|
|
|
число)
|
чисел различных типов
|
(=30.3el):t
|
EQUAL
|
(EQUAL число
|
Аналогична EQL,
|
(EQUAL(xyz)(xyz)):t
|
|
или список
|
но, кроме того, проверяет идентичность
|
|
|
число или список)
|
Списков
|
|
EQUALP
|
(EQUALP
|
Проверка наиболее общего равенства
|
|
|
объект объект)
|
|
|
NULL
|
(NULL список)
|
Проверка, является ли аргумент
|
|
|
|
пустым списком
|
|
NOT
|
(NOT логическая
|
Логическое отрицание
|
|
|
величина)
|
|
|
NTH
|
(NTH n список)
|
Выделение n-го элемента списка
|
(NTH 2 (1 2 3)): 3
|
|
|
|
(индексы начинаются с 0)
|
FIRST
|
|
Предикаты, выделяющие
|
|
SECOND
|
|
Соответствующие элементы списка
|
|
LAST
|
|
|
|
LIST
|
(LIST apr
|
Строит из аргументов список
|
(LIST a b (с)): (a b c)
|
|
арг2 ...)
|
|
|