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

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

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

Всем доброго! Задание. Определите функционал (A-APPLY f x), который применяет каждую функцию fi и fi+1 списка f = (f1 f2 ... fn) к соответствующему элементу xi списка x = (x1 x2 ... xn/2) и возвращает список, сформированный из результатов. Решил вот таким образом.
(defun a-apply (f x)
    (cond 
        ((null f) nil)
        ((null x) nil)
        (t (cons 
                    (cons (funcall (car f) (car x)) 
                     (cons (funcall (cadr f) (car x)) nil)) (a-apply (cddr f) (cdr x))))))

Проверка
 
> (defun Sum (x) (+ x x))
SUM
> (defun Razn (x) (- x 1))
RAZN
> (defun Mul (x) (* x x))
MUL

> (a-apply '(Sum Razn Razn Sum Mul Mul) '(2 3 4))
((4 1) (2 6) (16 16))
Как сделать чтобы не было подсписков?

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

textual
Листинг программы
(defn zipwith (f l1 l2)
    (cond (null? l1) nil (null? l2) nil
          (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