我有以下代码:
(define (howMany list)
(if (null? list)
0
(+ 1 (howMany (cdr list)))))
如果我们执行以下操作:(howMany '(1 2 3 (4 5)))
我们将获得4作为结果。我该怎么做才能计算列表中的整数数。意思是相同的问题将返回5作为答案而不是4。
答案 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