Определить функцию и передать её в apply - Lisp
Формулировка задачи:
Задание такое: в зависимости от переданного значения функции, с помощью apply выполнять либо сложение элементов списка, либо умножение элементов списка.
т.е
если x = 1, то результат 10, если x=2, то 24
вот, что сделал я: определяю функцию func
затем пытаюсь вызвать apply
но компилятор выдает ошибку
apply func(x) '(1 2 3 4)
(defun func_(x) (cond ((eql 1 x)(plus))(eql 2 x)(TIMES))
(apply func_(1) '(1 2 3 4))
Error: The variable FUNC_ is unbound. Fast links are on: do (si::use-fast-links nil) for debugging Error signalled by EVAL. Backtrace: EVAL Broken at SYSTEM::GCL-TOP-LEVEL.
Решение задачи: «Определить функцию и передать её в apply»
textual
Листинг программы
(defun funct (n) (cond ((= n 1) #'+) ((= n 2) #'*) (t (lambda (&rest x) x)))) ==> FUNCT (apply (funct 1) '(1 2 3 4)) ==> 10 (apply (funct 2) '(1 2 3 4)) ==> 24 (apply (funct 3) '(1 2 3 4)) ==> (1 2 3 4)
Объяснение кода листинга программы
В коде определена функция со строковым именем funct. Данная функция принимает один аргумент n. В зависимости от значения этого аргумента, функция возвращает один из трех возможных операторов:
- Если n равно 1, то возвращается оператор сложения (+).
- Если n равно 2, то возвращается оператор умножения (*).
- Если n не равно 1 и 2, то возвращается лямбда-функция, которая принимает произвольное количество аргументов (представленных в виде списка) и возвращает этот список без изменений. Затем функция funct передается в функцию apply, которая применяет функцию funct к списку '(1 2 3 4). При этом, функция apply передает каждый элемент списка в функцию funct по одному, пока не закончатся элементы списка. Результат выполнения кода: — При передаче функции funct с аргументом 1 в функцию apply, результатом будет 10, так как 10 - это результат сложения чисел 1, 2, 3 и 4. — При передаче функции funct с аргументом 2 в функцию apply, результатом будет 24, так как 24 - это результат умножения чисел 1, 2, 3 и 4. — При передаче функции funct с аргументом 3 в функцию apply, результатом будет список (1 2 3 4), так как лямбда-функция, возвращаемая при n=3, возвращает список без изменений.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д