返回两个列表中最短的Scheme函数

时间:2018-12-05 13:37:16

标签: function scheme

您必须返回一个函数,该函数返回两个列表中较短的一个。编写了这样的功能,但是有一个错误:

  

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

1 个答案:

答案 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))))))