Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/scheme/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 比较两个列表(作为集合)_List_Scheme_Equals - Fatal编程技术网

List 比较两个列表(作为集合)

List 比较两个列表(作为集合),list,scheme,equals,List,Scheme,Equals,我试图检查两个列表是否具有相同的元素(即,当作为集合处理时,它们是相等的)。例如: 它不适用于这样的数字: (set-eq? (1 2 3 4) '(4 3 2 1)) ;=> #f, but I need #t 这是我的密码: (define (set-eq? xs ys) (cond ((and (null? xs) (null? ys)) #t) ((or (null? xs) (null? ys)) #f) ((equal? (car xs

我试图检查两个列表是否具有相同的元素(即,当作为集合处理时,它们是相等的)。例如:

它不适用于这样的数字:

(set-eq? (1 2 3 4) '(4 3 2 1))
;=> #f, but I need #t
这是我的密码:

(define (set-eq? xs ys)
  (cond ((and (null? xs) (null? ys)) #t)
        ((or (null? xs) (null? ys))  #f) 
        ((equal? (car xs) (car ys)) (set-eq? (cdr xs) (cdr ys))) 
        (else #f)))

这段代码有什么问题?

这是我在评论中建议的,诀窍是使用过程测试列表中元素的成员资格:

(define (subset? l1 l2)
  (or (null? l1)
      (and (member  (car l1) l2)
           (subset? (cdr l1) l2))))

(define (set-equal? l1 l2)
  (and (subset? l1 l2)
       (subset? l2 l1)))
现在,它将作为一个过程,用于测试被视为集合的列表之间的相等性:

(set-equal? '(1 2 3 4) '(4 3 2 1))
=> #t

顺便说一句,如果两个列表的所有部分都相等,那么它们是相等的。i、 e.
(equal?“(abc)”(abc))=>t
,而
(equal?“(abc)”(bca))=>f
。您的代码的工作方式类似于
equal?
编写一个
子集?
过程,该过程测试一个列表是否是另一个列表的子集(即:如果一个列表中的所有元素都包含在另一个列表中),然后测试
(和(子集?l1 l2)(子集?l2 l1))
是否为真,如果出现这种情况,根据平等的定义,它们是平等的。
(set-equal? '(1 2 3 4) '(4 3 2 1))
=> #t