gpt4 book ai didi

printing - 在方案中给出一个数字流,我需要打印 n 个用逗号分隔的数字,例如 (1, 2, 3, 4, ..)

转载 作者:行者123 更新时间:2023-12-01 11:29:55 25 4
gpt4 key购买 nike

我可以使用下面的代码将 n 个数字打印为列表:

(define (print-first-n stream1 n)
(cond((= n 0) '())
(else(cons(stream-car stream1) (print-first-n (stream-cdr stream1) (- n 1))))))

但是我不知道如何添加逗号。

最佳答案

你不能在普通列表中打印逗号,但我们可以用流的内容构建一个字符串,用逗号分隔。这将起作用,假设字符串包含数字:

(define (print-first-n stream1 n)
(cond ((= n 1)
(number->string (stream-car stream1)))
(else
(string-append
(number->string (stream-car stream1)) ", "
(print-first-n (stream-cdr stream1) (- n 1))))))

上述解决方案适用于较小的 n 值,但对于较大的值非常低效(将创建大量临时字符串,O(n^2) 附加操作的复杂性)。为了更有效地实现,请考虑使用 SRFI-13 的连接程序,如下所示:

(require srfi/13)

(define (print-first-n stream1 n)
(let loop ((strm stream1) (n n) (acc '()))
(if (= n 1)
(string-concatenate-reverse
(cons (number->string (stream-car strm)) acc))
(loop (stream-cdr strm)
(sub1 n)
(list* ", " (number->string (stream-car strm)) acc)))))

无论哪种方式:假设 integers 是从 1 开始的无限整数流,它看起来是这样的:

(print-first-n integers 5)
=> "1, 2, 3, 4, 5"

如果流包含一些其他数据类型,请使用适当的过程将每个元素转换为字符串。

关于printing - 在方案中给出一个数字流,我需要打印 n 个用逗号分隔的数字,例如 (1, 2, 3, 4, ..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33249521/

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