您必须返回一个函数,该函数返回两个列表中较短的一个。编写了这样的功能,但是有一个错误:
else:不允许作为以下表达式:(else(sh(cdr shA)(cdr shB)))
我不知道如何解决。
(define (shorter a b)
(let sh ((shA a) (shB b))
(cond
(((null? shA) a)
((null? shB) b)
(else (sh (cdr shA) (cdr shB)))))))
答案 0 :(得分:2)
您的括号太多-这是一个完整的表达式:
(((null? shA) a)
((null? shB) b)
(else (sh (cdr shA) (cdr shB))))
您不能在该位置使用else
。
语法为(cond clause1 clause2 ...)
,而不是(cond (clause1 clause2 ...))
,因此您需要
(define (shorter a b)
(let sh ((shA a) (shB b))
(cond
((null? shA) a)
((null? shB) b)
(else (sh (cdr shA) (cdr shB))))))