SRFI/41和Racket/stream不同吗.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个项目?

机架5.3.3

是的,(in-range 10)产生的流类型与srfi/41流不同。通常,您不能期望srfi/41函数对Racket中的所有流都起作用,因为Racket"流"实际上是一种通用数据类型,可以分派到不同的方法实现(请参阅gen:stream)。相比之下,srfi/41只期望它自己的数据类型。

stream-take可能应该添加到racket/stream中)

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

相关内容

  • 没有找到相关文章

最新更新