这个分配是通过创建我自己的函数来检查两个列表是否相等,这样我就可以定义函数了。我遇到的问题是,当我尝试使用(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))))))
答案 0 :(得分:1)
您不能用括号括起true
,false
,它们不是程序,因此无法应用它们。试试这个:
(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))))))