Функции пересечения и разности списков - Lisp

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

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

Добрый День!!!!Помогите,пожалуйста!
(defun intersectionlist (list1 list2) 
(cond ((null list1) nil)
         ((null list2) nil)
        ((member (car list1) list2) 
        (cons (car list1) (intersectionlist (cdr list1) list2)))
        (t (intersectionlist (cdr list1) list2))))
 
(defun differencelist (list1 list2)
        (cond
        ((null list1) nil)
        ((not (member (car list1) list2)) 
        (cons (car list1) (differencelist (remove (car list1) list1) list2)))
        (t (differencelist (cdr list1) list2))))
Имеются функции пересечения и разности списков, но они работают только на внешнем уровне. Как сделать так, чтобы происходило пересечение и разность соответствующих уровней . Например, список 1: ( a s d ( f g 1 2 ( h ))), список 2: ( d f ( f g 1 (h k) ) ) пересечение : ( d (f g 1 (h))) разность : (a s (2 (nil)))

Решение задачи: «Функции пересечения и разности списков»

textual
Листинг программы
;; racket-lang.org
(define (intersect lst1 lst2)
  (for/list ([i lst1] #:when (member i lst2))
    i))
 
(intersect '(1 2 3 4) '(3 4 5 6))
;'(3 4)
 
(define (difference lst1 lst2)
  (for/list ([i lst1] #:unless (member i lst2))
    i))
 
(difference '(1 2 3 4) '(3 4 5 6))
;'(1 2)

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

  1. Функция intersect принимает два списка lst1 и lst2.
  2. Функция использует цикл for/list для перебора каждого элемента i из lst1.
  3. Внутри цикла, проверяется условие #:when (member i lst2), которое истинно, если элемент i присутствует в списке lst2.
  4. Если условие истинно, элемент i добавляется в результирующий список.
  5. В итоге, функция возвращает пересечение двух списков.
  6. Запускается функция intersect с аргументами '(1 2 3 4)' и '(3 4 5 6)'.
  7. Результатом выполнения функции будет список `'(3 4)', так как только эти элементы присутствуют в обоих списках.
  8. Функция difference принимает два списка lst1 и lst2.
  9. Функция использует цикл for/list для перебора каждого элемента i из lst1.
  10. Внутри цикла, проверяется условие #:unless (member i lst2), которое истинно, если элемент i отсутствует в списке lst2.
  11. Если условие истинно, элемент i добавляется в результирующий список.
  12. В итоге, функция возвращает разность двух списков.
  13. Запускается функция difference с аргументами '(1 2 3 4)' и '(3 4 5 6)'.
  14. Результатом выполнения функции будет список '(1 2)', так как только эти элементы присутствуют вlst1, но отсутствуют вlst2`.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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