Инструменты пользователя

Инструменты сайта


examination:flp:question11

11.Сокращенный вид вложенных вызовов CAR, CDR и CONS.

Комбинируя селекторы CAR и CDR, можно выделить произвольный элемент списка.

Например:

''(cdr (cdr (саr '( (а Ь с) (d е) (f)))))
(С)''

Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, и в Лиспе используется для этого более короткая запись: желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции:

(C…R список)

Вместо многоточия записывается нужная комбинация из букв А (для функции CAR) и D (для функции CDR):

(cadr х) <=> (саr (cdr х))
(cddar х) <=> (cdr (cdr (car х)))

Для функций CAR, CADR, CADDR, CADDDR и т.д. в Коммон Лиспе используются и более наглядные имена FIRST, SECOND, THIRD. FOURTH и т.д. Можно воспользоваться и наиболее общей функцией NTH, выделяющей n-й элемент списка: (NTH n список)

''(nth 2 '(1 2 3))
> 3
(third (cons 1(cons 2 (cons 3 nil))))
> 3
(forth '(1 2 3))
> nil
''

Последний элемент списка можно выделить с помощью функции LAST: (LAST х)

Построение списков нетрудно свести к вложенным вызовам функции CONS, причем вторым аргументом последнего вызова является NIL, служащий основой для наращивания списка.

(cons 1(cons 2 (cons 3 nil)))
> (1 2 3)
examination/flp/question11.txt · Последние изменения: 2014/01/15 12:17 (внешнее изменение)