Определить функционал a-apply - Lisp

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

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

Всем доброго! Задание. Определите функционал (A-APPLY f x), который применяет каждую функцию fi и fi+1 списка f = (f1 f2 ... fn) к соответствующему элементу xi списка x = (x1 x2 ... xn/2) и возвращает список, сформированный из результатов. Решил вот таким образом.
Листинг программы
  1. (defun a-apply (f x)
  2. (cond
  3. ((null f) nil)
  4. ((null x) nil)
  5. (t (cons
  6. (cons (funcall (car f) (car x))
  7. (cons (funcall (cadr f) (car x)) nil)) (a-apply (cddr f) (cdr x))))))
  8.  
  9. Проверка
  10. > (defun Sum (x) (+ x x))
  11. SUM
  12. > (defun Razn (x) (- x 1))
  13. RAZN
  14. > (defun Mul (x) (* x x))
  15. MUL
  16.  
  17. > (a-apply '(Sum Razn Razn Sum Mul Mul) '(2 3 4))
  18. ((4 1) (2 6) (16 16))
Как сделать чтобы не было подсписков?

Решение задачи: «Определить функционал a-apply»

textual
Листинг программы
  1. (defn zipwith (f l1 l2)
  2.     (cond (null? l1) nil (null? l2) nil
  3.           (cons (f (car l1) (car l2)) (zipwith f (cdr l1) (cdr l2)))))

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

В данном коде определен функционал zipwith, который принимает три аргумента: f, l1 и l2. В первой строке кода используется функция cond, которая проверяет, является ли первый аргумент l1 равным nil. Если это так, то возвращается nil. В противном случае, проверяется второй аргумент l2 на nil. Если l2 равен nil, то также возвращается nil. Если оба аргумента не равны nil, то возвращается новая функция, которая будет применяться к каждому элементу кортежей l1 и l2. Эта новая функция будет вызывать f с первым элементом l1 и первым элементом l2, а затем рекурсивно вызывать zipwith с оставшейся частью кортежей. В итоге, функционал zipwith создает новую функцию, которая применяет функцию f к каждой паре элементов из двух кортежей, и возвращает результат в виде кортежа. Если один из кортежей пуст, то возвращается nil.

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


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

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

11   голосов , оценка 4.364 из 5

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

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

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