Символьные выраженияСимвольные выражения в Lisp можно представить следующим образом: Символ – имя, состоящее из букв, цифр и специальных символов, и, возможно, представляющее некоторый лисповский объект (то есть, может иметь некоторое значение). Число – может быть целым или вещественным. Символы t и nil – обозначают логическое значение истина и ложь, соответственно. Атомы – это символы и числа. Список – это основной тип данных в Lisp. Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Пример списка: (1 2 (3 4) 4 5) Список, в котором нет ни одного элемента, называется пустым списком и обозначается () или nil. В виде списков могут быть записаны как данные, так и программы. Например, список (+ 2 3), в зависимости от контекста, может рассматриваться или как вызов функции суммирования, или как список, состоящий из трех элементов. Функция quote ‘(arg) или (quote arg) Назначение: блокирует вычисление выражения. Пример: > (+ 2 3) > ‘(+ 2 3); или > (quote (+ 2 3)) (+ 2 3) Базовые функции В Lisp для построения, разбора и анализа списков существуют очень простые базовые функции. Всего их пять – car, cdr, cons, atom и eq.
Функция car (car list) Назначение: выделяет первый элемент списка – голову списка. Пример: > (car ‘(one two three)) ONE
Функция cdr (cdr list) Назначение: выделяет хвост списка (как список). Пример: > (car ‘(one two three)) (TWO THREE)
Функция cons (cons head tail) Назначение: строит новый список из переданных ей в качестве аргументов головы и хвоста. Пример: > (cons ‘one ‘(two three)) (ONE TWO THREE)
Функция atom (atom arg) Назначение: проверяет, является ли аргумент атомом. Пример: > (atom ‘(1 2 3)) NIL > (atom ‘one) T > (atom (car (one two three))) T
Функция eq (eq symbol1 symbol2) Назначение: проверяет тождественность двух символов. Пример: > (eq ‘one ‘one)) T > (eq ‘one ‘two)) NIL
Управляющие структуры Примером управляющей структуры в языке может служить предложение cond.
Предложение cond (cond (predicate1 form1) (predicate2 form2) … (predicateN formN)) Назначение: выполнение ветвления. Описание действия: выражения predicate, исполняющие роль предикатов, вычисляются последовательно слева направо до тех пор, пока не встретится выражение, значением которого является истина, далее вычисляется результирующее выражение form, соответствующее этому предикату, и полученное значение возвращается в качестве значения всего предложения cond. Если истинного предиката нет, то значением cond будет nil. Рекомендуется в качестве последнего предиката использовать символ t, и соответствующее ему результирующее выражение будет вычисляться всегда в тех случаях, когда ни одно другое условие не выполняется. Пример: функция deftype, определяющая тип выражения (пустой список, атом или список). > (defun deftype(arg) (cond ((null arg) ‘emptylist) ((atom arg) ‘atom) (t ‘list))) DEFTYPE > (deftype ()) EMPTYLIST > (deftype 'abc) ATOM > (deftype '(a b c)) LIST
|