gpt4 book ai didi

stream - SRFI/41 和 Racket/stream 有区别吗?

转载 作者:行者123 更新时间:2023-12-01 11:46:17 30 4
gpt4 key购买 nike

Racket 中的

in-range 返回一个流。 racket/stream 库中的流上定义了大量函数。但是我不能对它们使用 srfi/41 中的函数 stream-take。我想执行

(stream-take 5 (in-range 10))

它提示 stream-take: non-stream argument

(stream->list (stream-cons 10 (in-range 10)))

以上抛出以下错误:

stream-promise: contract violation;
given value instantiates a different structure type with the same name
expected: stream?
given: #<stream>

但是:

(stream->list (stream-cons 10 stream-null)) ;; works
(stream->list (stream-cons 10 empty-stream)) ;; works

两者都很好。

以上是否意味着来自 racket/streamsrfi/41 的流不兼容?如何在不重新发明轮子的情况下从 racket/stream 流中取出 10 个项目?

Racket 5.3.3

最佳答案

是的,(in-range 10) 产生的流与 srfi/41 流不同。通常,您不能期望 srfi/41 函数在 Racket 中的所有流上工作,因为 Racket“流”实际上是一种通用数据类型,可以分派(dispatch)到不同的方法实现(参见 gen:stream)。相反,srfi/41 只需要它自己的数据类型。

(不过,stream-take 可能应该添加到 racket/stream 中)

如果你想从 racket/stream 中取出 10 个项目,使用 (for/list ([x some-stream] [e 10]) x)

关于stream - SRFI/41 和 Racket/stream 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979972/

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