На этом шаге мы введем понятие аппликативных функционалов.
Одним из основных типов функционалов являются функции, которые позволяют вызывать другие функции, иными словами, применять функциональный аргумент к его параметрам. Такие функционалы называют аппликативными (применяющими) функционалами.
Применяющие функционалы родственны универсальной функции языка LISP EVAL. В то время как EVAL вычисляет значение произвольного выражения, применяющий функционал вычисляет значение вызова некоторой функции.
Функция APPLY является функцией двух аргументов, из которых первый аргумент
представляет собой функцию, которая применяется к элементам списка, составляющим
второй аргумент функции APPLY: (APPLY FN Список). Например:
$ (APPLY PLUS (2 3))
5
Использование APPLY дает большую гибкость по сравнению с прямым вызовом
функции: с помощью одной и той же функции APPLY можно в зависимости от функционального
аргумента осуществлять различные вычисления. Например:
$ (APPLY (CAR (PLUS - * /)) (2 3))
5
(DEFUN APL-APPLY (LAMBDA (F X) % F и X - списки % (COND ( (NULL F) NIL ) ( T (CONS (APPLY (CAR F) (LIST (CAR X))) (APL-APPLY (CDR F) (CDR X))) ) ) ))
(DEFUN DRIVER (LAMBDA (RDS WRS) (LOOP (TERPRI) (PRIN1 (QUOTE "> ")) (PRINT (APPLY (READ) (READ) (TERPRI))) ) )) (DRIVER)
На следующем шаге мы продолжим изучение аппликативных функционалов, в частности, рассмотрим аппликативные функционалы в muLISP85.