我是计划和本网站的新人..我打断这个问题。请给我一个编写方案函数的方法来计算数字列表中有多少非零值。
(非零'(4 1 0 2 0 1 3)) - 5
答案 0 :(得分:0)
你必须考虑三种情况:
(define (non-zero numbers)
(cond ((null? numbers) 0) ; is the list empty? return zero
((not (= (car numbers) 0)) ; is the current element non-zero?
(+ 1 (non-zero (cdr numbers)))) ; add 1 to the counter and recur
(else ; otherwise
(non-zero (cdr numbers))))) ; skip to the next element
或者如果您的口译员支持它,更惯用的解决方案是使用更高阶的程序:
(define (non-zero numbers)
(count (lambda (n) (not (zero? n)))
numbers))
无论哪种方式,它都按预期工作:
(non-zero '(4 1 0 2 0 1 3))
=> 5
答案 1 :(得分:-1)
我根本不熟悉计划。但这可以使用递归轻松实现。想象一下列表[0,1,2,2,0,1]。您需要沿着列表向下走,依次查看每个元素,并在每次在列表中找到0时将计数器增加一个。
(define (count_zeroes numbers)
(if (null? numbers) 0
(+ 1 (count_zeroes (cdr numbers))))