Задача решена. Нужно переписать встроенную функцию nconc - Lisp

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

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

NCONC нужно написать вручную! Не пойму как
(defun exclusive(w v)
  (nconc (unique w v) (unique v w)))
 
(defun unique (w v)
  (cond ((null w) nil)
        ((member (car w) v) (unique (cdr w) v))
        ((cons (car w) (unique (cdr w) v)))))
 
 (exclusive '(a b c) '(c d))
(a b d)

Решение задачи: «Задача решена. Нужно переписать встроенную функцию nconc»

textual
Листинг программы
(DEFUN NCONC1 (X Y) 
    (COND ((NULL X) Y) 
              (T (RPLACD X (NCONC1 (CDR X) Y)))))
 
(DEFUN NCONC (&REST LSTS) 
    (COND ((NULL (CDR LSTS)) (CAR LSTS))
              (T (NCONC1 (CAR LSTS) (APPLY 'NCONC (CDR LSTS))))))

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

В коде есть две функции: NCONC1 и NCONC. NCONC1 - это рекурсивная функция, которая принимает два аргумента: X и Y. Если X — это NIL, то возвращается Y. Если X не является NIL, то рекурсивно вызывается NCONC1, но уже с CDR X и Y. NCONC - это функция, которая принимает любое количество аргументов (обобщённо указанных с помощью &REST LSTS). Она проверяет, является ли последний аргумент (CDR LSTS) NIL. Если это так, то возвращается первый аргумент (CAR LSTS). В противном случае, рекурсивно вызывается NCONC1 с CAR LSTS и APPLY 'NCONC с CDR LSTS. Код, который представлен, является реализацией функции concat в Scheme. Он может быть не оптимальным, поскольку использует рекурсию, а не итерацию.

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


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

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

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