使用scheme计算列表中的非零值

时间:2016-04-13 10:32:00

标签: scheme

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

  

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

2 个答案:

答案 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))))