Как написать функционал по-очереди farg s1 s2.sk? - Lisp

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

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

Как написать функционал по-очереди farg s1 s2..sk,который применяет функцию farg сначала к первым элементам списков s1,s2...sk,затем - ко вторым, и т.д. и формирующий список результатов?

Решение задачи: «Как написать функционал по-очереди farg s1 s2.sk?»

textual
Листинг программы
  1. (defun task (f &rest args)
  2.  (if (member nil args) nil
  3.   (let ((b nil)
  4.         (a nil))
  5.    (iter (for z in args)
  6.      (collecting (car z) into a)
  7.      (collecting (cdr z) into b))
  8.     (cons (apply f a) (apply 'task (cons f b))))))
  9.  
  10. ==> TASK
  11.  
  12. (task '* '(2 3 4) '(2 3 4) '(2 3 4))
  13.  
  14. ==> (8 27 64)

Объяснение кода листинга программы

В коде определён функциoн task, который принимает один обязательный аргумент f и произвольное количество аргументов args. Если args пуст, то возвращается nil. В противном случае, в функции создаются две переменные a и b, и в цикле iter происходит перебор всех элементов args. В каждой итерации, элемент z проверяется на ноль (что эквивалентно nil), если это так, то ничего не происходит. Если это не так, то car z (то есть, функция, которая возвращает голову списка z) присваивается переменной a, а cdr z (то есть, функция, которая возвращает хвост списка z) присваивается переменной b. После завершения цикла, функция apply применяется к переменной f с аргументом a, а затем функция task рекурсивно вызывается с аргументами f и b. Результатом всего этого является список, содержащий результаты вызова функции f с аргументом a, а затем результаты вызова функции task с аргументами f и b. Поэтому, если мы вызываем функцию task с аргументами '*', '(2 3 4)' и '(2 3 4)' (как в примере), то результатом будет (8 27 64), потому что *'(2 3 4) равно 8, (2 3 4) равно 27, и (2 3 4) равно 64.

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы