如何修改代码以仅添加偶数?

时间:2019-11-11 23:03:15

标签: scheme racket

我应该编写一个过程,该过程需要用户输入并仅查找偶数之和。我已经编写了代码,以便找到所有输入的总和,但是我不确定如何修改它以仅将输入加在一起。

(define even
  (lambda()
    (accumulator 0 0 (read))))

(define accumulator
  (lambda(sum n next) 
     (if (not (number? next))
         (compute-sum sum n)
         (accumulator (+ n sum) (+ 1 n)(read)))))

(define compute-sum
  (lambda(sum n)
    (if (> n 0)(+ sum n)
        "no number")))

(even)

如果输入为1 2 3 4 5结尾,则输出应为6

2 个答案:

答案 0 :(得分:1)

(define even
  (lambda()
    (accumulator 0 0 (read))))

(define accumulator
  (lambda(sum n next) 
    (if (not (number? next))
        (compute-sum sum n)
        ; Problem 1: (accumulator (+ n sum) (+ 1 n)(read)))))
        (if (even? next)
            (accumulator (+ next sum) (+ 1 n) (read))
            (accumulator sum (+ 1 n) (read))))))

(define compute-sum
  (lambda(sum n)
    ; Problem 2: (if (> n 0)(+ sum n)
    (if (> n 0) sum
        "no number")))

(even)

问题1 :基于是否均匀,递归调用应将next添加到sum

问题2 :最终结果不应将n加到sum上,而应该返回总和。

答案 1 :(得分:1)

您可以在球拍中使用for/sum

(define (sum-even data)
  (for/sum ([x (in-list data)] #:when (and (number? x) (even? x))) x))

> (sum-even '(1 2 3 4 5 "end"))
6