Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Базовые функции языка.




Функции разбора.

Функция 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)

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...