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

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

    Синтаксис функции MAPC в muLISP81 следующий: (MAPC FN LST) , где: FN - имя функции или LAMBDA-выражение, LST - список.     Функция MAPC последовательно применяет FN к элементам списка, т.е. к (CAR LST), (CAR (CDR LST)) и т.д.     Код функции в muLISP81 таков: (DEFUN MAPC (LAMBDA (FUN LST) (LOOP ( (NULL LST) NIL ) (PRINT (FUN (POP LST))) ) ))     Пример. (DEFUN DEMO (LAMBDA (LST) (PRIN1 "Результат действия MAPC: ") (MAPC PRIMER LST) )) % ----------------------- % (DEFUN PRIMER (LAMBDA (LST) (PLUS (CAR LST) 1) )) % ------------------------- % (DEFUN MAPC (LAMBDA (FUN LST) (LOOP ( (NULL LST) NIL ) (PRINT (FUN (POP LST))) ) ))     В системе muLISP85 функция (MAPC FN LST11 ...LSTN) выполняет действия, указанные функцией FN над CAR-элементами списков LST1,...,LSTN, затем - над CDR-элементами каждого списка, и т.д. до тех пор, пока каждый список не будет исчерпан. Функция МАРС возвращает список LST1. Например: $ (MAPC 'PRIN1 '(DOG CAT COW)) DOGCATCOW Учтите, что функция вернет (DOG CAT COW).     Код функции в muLISP85 таков: (DEFUN MAPC (FUNC LST1 LST2) ( (OR (NULL LST1) (NULL LST2)) LST1 ) ( FUNCALL FUNC (CAR LST1) (CAR LST2) ) ( MAPC FUNC (CDR LST1) (CDR LST2) ) LST1 )     Отображающие функционалы не усиливают вычислительной мощности языка LISP, но, без сомнения, являются удобными изобразительными средствами. Во многих случаях с их помощью можно существенно сократить запись по сравнению с повторяющимися вычислениями, выраженными рекурсией или итерацией.     Замечание. В версии muLISP85 есть еще один функционал: MAPL. Функция (MAPL FUNC LIST1 ... LISTN) выполняет действия, определенные функцией FUNC над элементами LIST1,...,LISTN, затем - над CDR-элементами каждого списка и т.д., пока каждый список не будет исчерпан. Функция MAPL возвращает LIST1. Например: $ (MAPL 'PRIN1 '(A B C)) (A B C) (B C) (C) Приведем код этого функционала: (DEFUN MAPL (FUNC LST1 LST2) ( (OR (NULL LST1) (NULL LST2)) LST1 ) ( FUNCALL FUNC LST1 LST2 ) ( MAPL FUNC (CDR LST1) (CDR LST2) ) LST1 )

    На следующем шаге мы перейдем к объединяющим функционалам.

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

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