Функции пересечения и разности списков - Lisp
Формулировка задачи:
Добрый День!!!!Помогите,пожалуйста!
Имеются функции пересечения и разности списков, но они работают только на внешнем уровне. Как сделать так, чтобы происходило пересечение и разность соответствующих уровней . Например, список 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)))
(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))))
Решение задачи: «Функции пересечения и разности списков»
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)
Объяснение кода листинга программы
- Функция
intersect
принимает два спискаlst1
иlst2
. - Функция использует цикл
for/list
для перебора каждого элементаi
изlst1
. - Внутри цикла, проверяется условие
#:when (member i lst2)
, которое истинно, если элементi
присутствует в спискеlst2
. - Если условие истинно, элемент
i
добавляется в результирующий список. - В итоге, функция возвращает пересечение двух списков.
- Запускается функция
intersect
с аргументами'(1 2 3 4)'
и'(3 4 5 6)'
. - Результатом выполнения функции будет список `'(3 4)', так как только эти элементы присутствуют в обоих списках.
- Функция
difference
принимает два спискаlst1
иlst2
. - Функция использует цикл
for/list
для перебора каждого элементаi
изlst1
. - Внутри цикла, проверяется условие
#:unless (member i lst2)
, которое истинно, если элементi
отсутствует в спискеlst2
. - Если условие истинно, элемент
i
добавляется в результирующий список. - В итоге, функция возвращает разность двух списков.
- Запускается функция
difference
с аргументами'(1 2 3 4)'
и'(3 4 5 6)'
. - Результатом выполнения функции будет список
'(1 2)', так как только эти элементы присутствуют в
lst1, но отсутствуют в
lst2`.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д