Функции пересечения и разности списков - 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`.

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


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

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

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