gpt4 book ai didi

java - 我怎样才能将这段代码转换成 Racket /方案

转载 作者:行者123 更新时间:2023-12-02 09:03:36 24 4
gpt4 key购买 nike

这是我想要翻译成 Racket 的代码:

public static ArrayList<Integer> convert(int k, int n) {
ArrayList<Integer> lst = new ArrayList<>();
while (k / n != 0) {
lst.add(k % n);
k = k/n;
}
lst.add(k % n);
return lst;
}

例如在 Racket 中,(convert 23 2) 应返回十进制 23 的二进制,即 (list 1 0 1 1 1)

这是我到目前为止得到的:

(define (convert k n)
(cond
[(> (/ k n) 0) (list(modulo k n))]
[else 0]
))

它适用于列表的第一个元素。

感谢您的帮助!

最佳答案

请注意,Java 中的 / 运算符执行整数除法,因此在 Racket 中,您必须使用 quotient 才能获得相同的效果。

这是使用命名的 let 来实现循环的好机会,因为结果列表需要反向累积。除此之外,解决方案非常简单:

(define (convert k n)
(let loop ((k k) (acc '()))
(if (zero? (quotient k n))
(cons (modulo k n) acc)
(loop (quotient k n) (cons (modulo k n) acc)))))

例如:

(convert 23 2)
=> '(1 0 1 1 1)

关于java - 我怎样才能将这段代码转换成 Racket /方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993838/

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