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