我需要帮助在 dr Racket 中以 r5rs 的语法对此进行编码。调整函数,使其计算前 n 个偶数的总和
问问题
423 次
2 回答
3
您没有在问题中提供足够的信息来给出准确的答案。哦,好吧 - 只是为了好玩,让我们看看如何使用流来解决这个问题。假设您安装了SRFI-41 ,以下将在 R5RS 下工作:
; import streams library
(#%require srfi/41)
; generate an infinite stream of numbers
; starting at x, with an n increment
(define (iter x n)
(stream-cons x (iter (+ x n) n)))
; compute the sum of the first n even numbers
(define (sum-even n)
(let loop ((evens (iter 0 2)) ; stream of even numbers
(acc 0) ; accumulated sum
(n n)) ; generate n numbers
(if (zero? n) ; did we generate enough numbers?
acc ; then return the accumulator
(loop (stream-cdr evens) ; else advance recursion
(+ acc (stream-car evens)) ; update accumulator
(- n 1))))) ; one less number to generate
它按预期工作:
(sum-even 6)
=> 30
(= (sum-even 6) (+ 0 2 4 6 8 10))
=> #t
于 2013-09-09T00:35:25.697 回答
2
本着与 Óscar López 的回答相同的精神,这是另一个基于流的实现:
(#%require srfi/41)
(define (sum-first-n-evens n)
(stream-fold + 0 (stream-take n (stream-from 0 2))))
于 2013-09-09T01:12:20.730 回答