Скачиваний:
8
Добавлен:
01.05.2014
Размер:
3.44 Кб
Скачать

Шаг 24. Отображающие функционалы. Функция MAPLIST     На этом шаге мы рассмотрим функцию MAPLIST.

    Функция MAPLIST действует подобно функции MAPCAR, но действия осуществляются не над элементами списка, а над последовательными CDR (начиная с исходного списка) этого списка.     Приведем код функции для muLISP81: (DEFUN MAPLIST (LAMBDA (FUN LST) (COND ( (NULL LST) NIL ) ( T (CONS (FUN LST) (MAPLIST FUN (CDR LST))) ) ) )) Тестовый пример: $ (MAPLIST (LAMBDA (Y) Y) (A B C)) ((A B C) (B C) (C))     Пример. (DEFUN DEMO (LAMBDA NIL) (PRIN1 "Результат действия MAPLIST: ") (MAPLIST SUMMA (1 2 3)) )) % ---------------------- % (DEFUN SUMMA (LAMBDA (LST) % Функция возвращает сумму элементов списка LST % (COND ( (NULL LST) 0) ( T (PLUS (CAR LST) (SUMMA (CDR LST))) ) ) )) % ---------------------------- % (DEFUN MAPLIST (LAMBDA (FUN LST) (COND ( (NULL LST) NIL ) ( T (CONS (FUN LST) (MAPLIST FUN (CDR LST))) ) ) )) Тестовый пример: $ (DEMO) (6 5 3)     В системе muLISP85 функция (MAPLIST FN LST1...LSTN) выполняет действия, предписанные функцией FN над элементами списков LIST1,...,LISTN, затем - над CDR-элементами каждого списка и т.д. до тех пор, пока каждый из списков не будет исчерпан. Функция MAPLIST возвращает список результатов. Например: $ (MAPLIST 'REVERSE '(A B C D)) ((D C B A) (D C B) (D C) (D)) Код функции в системе muLISP85 выглядит так: (DEFUN MAPLIST (FUNC LST1 LST2) ( (OR (NULL LST1) (NULL LST2)) NIL ) (CONS (FUNCALL FUNC LST1 LST2) (MAPLIST FUNC (CDR LST1) (CDR LST2))) )     Функционалы MAPCAR и MAPLIST используются для программирования циклов специального вида, поскольку с их помощью можно лаконично выразить повторяющиеся вычисления.

    На следующем шаге мы продолжим изучение отображающих функционалов, в частности, рассмотрим функцию MAPC.

Предыдущий шаг Содержание Следующий шаг

Соседние файлы в папке Язык программирования ЛИСП