Определить функцию и передать её в apply - Lisp

Узнай цену своей работы

Формулировка задачи:

Задание такое: в зависимости от переданного значения функции, с помощью apply выполнять либо сложение элементов списка, либо умножение элементов списка. т.е
apply func(x) '(1 2 3 4)
если x = 1, то результат 10, если x=2, то 24 вот, что сделал я: определяю функцию func
(defun func_(x) (cond ((eql 1 x)(plus))(eql 2 x)(TIMES))
затем пытаюсь вызвать apply
(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. В зависимости от значения этого аргумента, функция возвращает один из трех возможных операторов:

  1. Если n равно 1, то возвращается оператор сложения (+).
  2. Если n равно 2, то возвращается оператор умножения (*).
  3. Если 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, возвращает список без изменений.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы