gpt4 book ai didi

java - 帮我把这个 Java 翻译成 Scheme 让事情在我的脑海里进行

转载 作者:行者123 更新时间:2023-11-29 10:06:16 24 4
gpt4 key购买 nike

我正在学习 Scheme,我已经阅读了基础知识,但我仍然不知道如何将 Java 类“映射”到 Scheme 代码。你们有人能帮我吗?我只需要有人向我展示这在 Scheme 中的样子,以掌握最终的细节并让事情在我的脑海中进行:

public class sumFibonacciValues {
public static void main(String [] args) {
int n = 4000000;
long i2 = 1, i1 = 1, Fibo = 0, temp = 1;
while(i2 < n) {
temp = i1 + i2;
i1 = i2;
i2 = temp;
if(i2 % 2 == 0)
Fibo += i2;
}
System.out.println(Fibo);
}
}

最佳答案

我不会回答看起来很像家庭作业的问题,但“惯用语”评论只是乞求证明它真的没有那么远。首先,直接翻译:

(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))

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

(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 代码进行相同的清理。 (但这真的留给读者作为练习......)

关于java - 帮我把这个 Java 翻译成 Scheme 让事情在我的脑海里进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com