Подскажите пожалуйста что такое функциональное значение? - Lisp
Формулировка задачи:
функциональный аргумент
. Пример я нашел. Если функция возвращает в качестве результата другую функцию, то этофункциональное значение
. Не могли бы вы привести пример такой функции и подсказать для чего обычно требуется вообще возвращать функцию? Заранее благодарен.Решение задачи: «Подскажите пожалуйста что такое функциональное значение?»
;; Построение списка функций, умножающих свой аргумент на n, n-1, n-2,... (defun mk-multer (n) (if (zerop n) nil (cons (lambda (x) (* x n)) (mk-multer (- n 1))))) ==> mk-multer ;; Применяем к этому списку и списку целых обычный mapcar (mapcar 'funcall (mk-multer 5) (range 3 7)) ==> (15 16 15 12 7)
Объяснение кода листинга программы
В этом коде определенная функция mk-multer строит список функций, которые умножают свой аргумент на n, n-1, n-2, ..., где n - это аргумент функции mk-multer. Если n равно нулю, то возвращается nil.
Функция mk-multer рекурсивно вызывает саму себя, уменьшая значение n на единицу, пока n не станет равным нулю. Когда n становится равным нулю, функция возвращает nil, завершая рекурсию.
В каждой итерации рекурсии функция mk-multer добавляет новую функцию в список, которая умножает свой аргумент на текущее значение n.
Затем, с помощью функции mapcar, этот список функций применяется к последовательности целых чисел от 3 до 7 (включительно), используя функцию funcall для вызова каждой функции в списке с соответствующим аргументом.
Результатом выполнения кода будет список результатов вычисления каждой функции из списка, примененной к соответствующему числу из последовательности. В данном случае результатом будет (15 16 15 12 7).