2016-04-13 26 views
0

我是新方案,在这个网站..我打断了这个问题。请给我一种方法来编写一个计划函数来计算一个数字列表中有多少非零值。从方案列表中计数非零值

(非零'(4 1 0 2 0 1 3)) - 5

回答

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 
+0

yeahh ..它那样做:)谢谢 –

-1

我对计划根本不熟悉。但是这可以很容易地使用递归来实现。想象一下列表[0,1,2,2,0,1]。您需要沿着列表走下去,依次查看每个元素,并在每次在列表中找到0时增加一个计数器。

(define (count_zeroes numbers) 
    (if (null? numbers) 0 
     (+ 1 (count_zeroes (cdr numbers)))) 
+0

是啊谢谢..但在这里,我们检查的原子是一个非零值的条件? (用于检查我们使用的零(= 0(汽车号))),这就是为什么我困惑,我们如何检查原子是不是零? –