Функции пересечения и разности списков - 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`.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д