首页 > 解决方案 > 如何修改我的代码以仅添加偶数?

问题描述

我应该编写一个程序来接受用户输入并仅找到偶数的总和。我已经编写了代码,以便它找到所有输入的总和,但我不确定如何修改它以仅将偶数输入相加。

(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 end,输出应该是6

标签: schemeracket

解决方案


(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:递归调用应该添加nextsum基于它是否是偶数。

问题 2:最终结果不应该添加n到 中sum,它应该只返回总和。


推荐阅读