Входят ли атомы первого списка во второй - Lisp

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

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

3. Опишите функцию, которая определяет, входят ли атомы первого списка во второй, учитывая все атомы всех подсписков обоих списков. Заранее огромное спасибо за ответ.

Решение задачи: «Входят ли атомы первого списка во второй»

textual
Листинг программы
(DEFUN SETOF (X) 
          (COND ((NULL X) NIL) 
                    ((MEMBER (CAR X) (CDR X)) (SETOF (CDR X))) (T (CONS (CAR X) (SETOF (CDR X))))))
 (DEFUN FLATTEN (X) 
          (COND ((NULL X) NIL) 
                    ((ATOM X) (LIST X)) 
                    (T (APPEND (FLATTEN (CAR X)) (FLATTEN (CDR X))))))
 
(print (setof '(1 2 3 2 3 2 2)))

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

В этом коде определены две функции: SETOF и FLATTEN. Функция SETOF принимает один аргумент X и возвращает список, содержащий все элементы из X, которые встречаются более одного раза. Если X — это пустой список, то возвращается NIL. Если X — это не пустой список, то его первый элемент проверяется на наличие в оставшейся части списка. Если этот элемент найден, то он не включается в результат, а функция вызывается рекурсивно для оставшейся части списка. Если этот элемент не найден, то он включается в результат, который затем дополняется результатами вызова функции SETOF для оставшейся части списка. Если X — это атом, то он включается в результат. Функция FLATTEN принимает один аргумент X и возвращает список, содержащий все элементы из X, приведенные к одному уровню. Если X — это пустой список, то возвращается NIL. Если X — это не пустой список, то его первый элемент проверяется на то, является ли он атомом. Если это так, то он включается в результат. Если это не так, то вызывается рекурсивно функция FLATTEN для этого элемента и результат этого вызова присоединяется к результату. Затем вызывается рекурсивно функция FLATTEN для оставшейся части списка и результат этого вызова присоединяется к результату. В конце кода вызывается функция print для вывода списка (1 2 3 2 3 2 2).

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


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

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

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