Вернуть список содержащий элементы первого списка, не принадлежащие второму списку - Lisp

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

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

С помощью рекурсии нужно выполнить это задание, я взял пример выполнения здесь Рекурсия: вернуть список, содержащий элементы первого списка, не принадлежащие второму списку Вот это решение
(defun F (L1 L2)
 (cond ((null L1) nil)
          ((member (car L1) L2) (F (cdr L1) L2))
          (T (cons (car L1) (F (cdr L1) L2)))))
Но в DrRacket defun не работает, делаю через define и тд, вот попытался переписать код
#lang racket
(define (f l1 l2)
  (cond ((null? l1) null)
        ((member (car l1) l2) (f (cdr l1) l2)))
  (#t (cons (car l1) (f (cdr l1) l2))))
И когда ввожу (f '(1 3 5) '(2 8 3)) Выдает ошибку: car: contract violation expected: pair? given: '() Помогите, кто знает, где я ошибся? Как решить?

Решение задачи: «Вернуть список содержащий элементы первого списка, не принадлежащие второму списку»

textual
Листинг программы
(define (f l1 l2)
  (cond ((null? l1) null)
        ((member (car l1) l2) (f (cdr l1) l2))
        (else (cons (car l1) (f (cdr l1) l2)))))

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

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

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


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

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

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