Я ищу функцию, которая сравнивает или проверяет, равны ли 2 списка.
Следует игнорировать порядок номеров и повторяющиеся номера ...
Я уже создал функцию, которая проверяет, является ли элемент частью списка в другом блоке, но у меня сейчас есть некоторые проблемы с этим.
Вот что у меня есть
(define (ispart? x b)
(cond ((null? b) #f)
((= x (car b)) #t)
(else (ispart? x (cdr b)))))
(define (check=? c1 c2)
(define (verification-1 c1 c2)
(cond((null? c1)
#t)
((ispart? (car c1) c2) (check=? (cdr c1) c2))))
(define (verification-2 c1 c2)
(cond((null? c2)
#t)
((ispart? (car c2) c1) (check=? c1 (cdr c2)))))
(if (equal? (and verification-1 verification-2) #t)
#t
(#f)))
У меня, в основном, проблемы с условиями, я создаю проверку для каждого элемента первого списка, чтобы увидеть, принадлежит ли он ко второму списку, а затем проверку для каждого элемента второго списка. Если какой-либо элемент не проходит эту проверку, списки отличаются.
Я тоже пробовал это, но он не игнорирует дублированные числа или порядок номеров, поэтому (3 2 1) отличается от (1 2 2 3), и я не хочу, чтобы это произошло
(define (lists=? lst1 lst2)
(cond ((null? lst1) (null? lst2))
((null? lst2) #f)
((= (car lst1) (car lst2))
(lists=? (cdr lst1) (cdr lst2)))
(else #f)))