【问题标题】:Scheme : Compare/Check if 2 lists are equal方案:比较/检查 2 个列表是否相等
【发布时间】:2014-06-26 05:53:50
【问题描述】:

我正在寻找一个比较或检查两个列表是否相等的函数。

它应该忽略数字顺序和重复数字...

我已经创建了一个函数来检查一个元素是否是另一个块上列表的一部分,但是我现在遇到了一些问题。

这就是我所拥有的

(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)))

【问题讨论】:

  • 真的,你想做的是检查两个 sets 是否相等。这些集合恰好用一个列表表示,但本质上您正在尝试进行集合比较。这可能会提示您要搜索的内容。
  • 是的,我想检查一下并忽略重复的数字和数字顺序......目前我仍然对我遇到的错误一无所知。
  • 对。开始谷歌搜索“方案集比较”或“方案集相等”之类的东西。 :-)

标签: list scheme equals verification


【解决方案1】:

给定一个函数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))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2016-03-06
    • 2010-11-16
    • 1970-01-01
    • 2018-05-21
    • 2021-07-22
    • 2012-01-10
    相关资源
    最近更新 更多