java scheme_帮我把这个Java翻译成Scheme来让事情顺利进行

我不会回答那些看起来像家庭作业的东西,但是“惯用语”的评论只是要求证明它真的不是那么远。一,直接翻译:

(define (sum-fibonacci-values)

(define n 4000000)

(define i2 1)

(define i1 1)

(define fibo 0)

(define temp 1)

(let loop ()

(when (< i2 n)

(set! temp (+ i1 i2))

(set! i1 i2)

(set! i2 temp)

(when (zero? (modulo i2 2)) (set! fibo (+ fibo i2)))

(loop)))

(write fibo))其次,通过删除冗余突变使其成为“惯用”,而只是绑定新值,并使用尾递归循环。请注意,此代码仍与原始代码直接相关:

(define (sum-fibonacci-values)

(define n 4000000)

(let loop ([i2 1] [i1 1] [fibo 0] [temp 1])

(if (< i2 n)

(let* ([temp (+ i1 i2)]

[i1 i2]

[i2 temp]

[fibo (if (zero? (modulo i2 2)) (+ fibo i2) fibo)])

(loop i2 i1 fibo temp))

fibo)))最后,既然代码更清晰,你可以看到有一些冗余。这是一个清理版本:

(define (sum-fibonacci-values)

(define n 4000000)

(let loop ([i2 1] [i1 1] [fibo 0])

(if (< i2 n)

(let ([i3 (+ i1 i2)])

(loop i3 i2 (if (zero? (modulo i3 2)) (+ fibo i3) fibo)))

fibo)))请注意,可以对Java代码执行相同的清理。 (但这真的留给了读者......)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值