检查列表是否相等Scheme

时间:2018-05-09 03:56:29

标签: list scheme racket

这个分配是通过创建我自己的函数来检查两个列表是否相等,这样我就可以定义函数了。我遇到的问题是,当我尝试使用(listEquals list1 list2)调用该函数时,它返回错误

  

申请:不是程序;
  期望一个可以应用于论证的程序
  给出:#f

我输入两个列表list1 =(1 2 3 4),list2 =(2 3 4 5)。

这是我目前的意见

(define listEquals (lambda (list1 list2)
     (if (eq? list1 null) 

            (if (eq? list2 null)
                (true)
            (false)) 
     (if (eq? list2 null) 

            (false) 
            (if (eq? (first list1) (first list2))

                (listEquals (rest  list1) (rest list2))
            (false))))))

2 个答案:

答案 0 :(得分:1)

您不能用括号括起truefalse,它们不是程序,因此无法应用它们。试试这个:

(define listEquals
  (lambda (list1 list2)
    (if (eq? list1 null)
        (if (eq? list2 null)
            true
            false)
        (if (eq? list2 null) 
            false
            (if (eq? (first list1) (first list2))
                (listEquals (rest  list1) (rest list2))
                false)))))

答案 1 :(得分:0)

您已经接受了答案,但这里有一种不涉及条件的不同方法。

如果只有

,则两个列表相等
  • 两者都是空的,或者两者都是非空的,
    • 它们是空的,
    • 他们的第一个元素是相等的,它们的尾巴是相等的

在计划中:

(define (list-equals ls1 ls2)
    (and (equal? (empty? ls1) (empty? ls2))
         (or (empty? ls1) ; Only need to check one since they're equal
             (and (eq? (first ls1) (first ls2))
                  (list-equals (rest ls1) (rest ls2))))))