在球拍中定义mylength函数

时间:2019-02-26 03:02:06

标签: scheme racket

我正在尝试弄清楚如何在球拍中定义长度功能。 这是我的代码:

(define mylength
  (lambda (lst)
    (cond
     ((null? lst) 0)
     (else (+ 1 (mylength (cdr lst))))
     )))

如果我尝试(mylength '(1 2 3))的结果是3。当我尝试(mylength '(1 (2 3) 4))的结果仍然是3。但是结果应该是4。我该怎么做?在球拍中

1 个答案:

答案 0 :(得分:0)

如果要分别计算嵌套元素,则还需要递归到(car lst)

(define mylength
  (lambda (lst)
    (cond
     ((null? lst) 0)
     ((atom? lst) 1)
     (else (+ (mylength (car lst))
              (mylength (cdr lst))))
     )))

请注意,这意味着嵌套的空列表不会增加长度。

(mylength '(1 () 3))

将是2,而不是3