Scheme - 计算列表中的元素

时间:2015-10-29 22:47:13

标签: scheme racket

我有以下代码:

(define (howMany list)
  (if (null? list)
      0
      (+ 1 (howMany (cdr list)))))

如果我们执行以下操作:(howMany '(1 2 3 (4 5)))我们将获得4作为结果。我该怎么做才能计算列表中的整数数。意思是相同的问题将返回5作为答案而不是4。

1 个答案:

答案 0 :(得分:3)

您只需使用标准模板遍历列表列表:

(define (howMany lst)
  (cond ((null? lst) 0)                  ; an empty list has 0 elements
        ((not (pair? lst)) 1)            ; if it's an element, then count it as 1
        (else (+ (howMany (car lst))     ; otherwise advance the recursion
                 (howMany (cdr lst)))))) ; over both the `car` and the `cdr`

更简洁,更惯用的解决方案是使用内置列表程序,如下所示:

(define (howMany lst)
  (length (flatten lst)))

无论哪种方式,它都按预期工作:

(howMany '(1 2 3 (4 5)))
=> 5