Базовые функции языка.
Функции разбора. Функция CAR возвращает в качестве значения первый элемент списка. (CAR список) ð S - выражение (атом либо список).
_(CAR ‘(a b c d)) ð a _(CAR ‘((a b) c d)) ð (a b) _(CAR ‘(a)) ð a _(CAR NIL) ð NIL «Голова пустого списка - пустой список.»
Вызов функции CAR с аргументом (a b c d) без апострофа был бы проинтерпретирован как вызов функции «a» с аргументом «b c d», и было бы получено сообщение об ошибке. Функция CAR имеет смысл только для аргументов, являющихся списками.
(CAR ‘a) ð Error
Функция CDR - возвращает в качестве значения хвостовую часть списка, т. е. список, получаемый из исходного списка после удаления из него головного элемента:
(CDR список) ð список Функция CDR определена только для списков.
_(CDR ‘(a b c d)) ð (b c d) _(CDR ‘((a b) c d)) ð (c d) _(CDR ‘(a (b c d))) ð ((b c d)) _(CDR ‘(a)) ð NIL _(CDR NIL) ð NIL _(CDR ‘a) ð Error
Функция создания CONS. Функция CONS строит новый список из переданных ей в качестве аргументов головы и хвоста.
(CONS голова хвост) Для того чтобы можно было включить первый элемент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком. Значением функции CONS всегда будет список:
(CONS s-выражение список) ð список
_(CONS ‘a ‘(b c)) ð (a b c) _(CONS ‘(a b) ‘(c d)) ð ((a b) c d) _(CONS (+ 1 2) ‘(+ 3)) ð (3 + 3) _(CONS ‘(a b c) NIL) ð ((a b c)) _(CONS NIL ‘(a b c)) ð (NIL a b c)
Предикаты ATOM, EQ, EQL, EQUAL. Предикат - функция, которая определяет, обладает ли аргумент определенным свойством, и возвращает в качестве значения NIL или T. Предикат ATOM - проверяет, является ли аргумент атомом: (ATOM s - выражение) Значением вызова ATOM будет T, если аргументом является атом, и NIL - в противном случае.
_(ATOM ‘a) ð T _(ATOM ‘(a b c)) ð NIL _(ATOM NIL) ð T _(ATOM ‘(NIL)) ð NIL
Предикат EQ сравнивает два символа и возвращает значение T, если они идентичны, в противном случае - NIL. С помощью EQ сравнивают только символы или константы T и NIL.
_(EQ ‘a ‘b) ð NIL _(EQ ‘a (CAR ‘(a b c))) ð T _(EQ NIL ()) ð T
Предикат EQL работает так же как и EQ, но дополнительно позволяет сравнивать однотипные числа.
_(EQL 2 2) ð T _(EQL 2.0 2.0) ð T _(EQL 2 2.0) ð NIL
Для сравнения чисел различных типов используют предикат «=». Значением предиката «=» является T в случае равенства чисел независимо от их типов и внешнего вида записи.
(= 2 2.0) ð T
Предикат EQUAL проверяет идентичность записей. Он работает как EQL, но дополнительно проверяет одинаковость двух списков. Если внешняя структура двух лисповских объектов одинакова, то результатом EQUAL будет T.
_(EQUAL ‘a ‘a) ð T _(EQUAL ‘(a b c) ‘(a b c)) ð T _(EQUAL ‘(a b c) ‘(CONS ‘a ‘(b c))) ð T _(EQUAL 1.0 1) ð NIL
Функция NULL проверяет на пустой список.
_(NULL ‘()) ð T
Вложенные вызовы CAR и CDR. Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, в Лиспе для этого используется более короткая запись. Желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции: (C...R список)
Вместо многоточия записывается нужная комбинация из букв A и D (для CAR и CDR соответственно). В один вызов можно объединять не более четырех функций CAR и CDR. (CADAR x) ó (CAR (CDR (CAR x)))
_(CDDAR ‘((a b c d) e)) ð (c d) _(CDDR ‘(k l m)) ð (M)
Функция LIST - создает список из элементов. Она возвращает в качестве своего значения список из значений аргументов. Количество аргументов произвольно.
_(LIST ‘a ‘b ‘c) ð (a b c) _(LIST ‘a ‘b (+ 1 2)) ð (a b 3)
Читайте также: A) функции государства Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|