我正在寻找一个函数,可以比较或检查两个列表是否相等。
它应该忽略数字顺序和重复的数字...
我已经创建了一个函数来检查一个元素是否是另一个块上列表的一部分,但是现在这个函数遇到了一些问题。
这是我的资料
(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)))发布于 2011-12-06 07:28:19
给定一个函数all,该函数表示如果列表的所有元素都为真,
(define (all l)
(cond ((null? l) #t)
((equal? #f (car l)) #f)
(else (all (cdr l)))))给定您的ispart?函数,
您可以简单地查看第一个列表中的每个元素是否都通过了第二个列表中的ispart?测试,反之亦然:
(define (set_equal l0 l1)
(and (all (map (lambda (x) (ispart? x l1))
l0))
(all (map (lambda (x) (ispart? x l0))
l1))))https://stackoverflow.com/questions/8386238
复制相似问题