【问题标题】:Are SRFI/41 and Racket/stream different?SRFI/41 和 Racket/stream 不同吗?
【发布时间】:2013-02-05 11:04:25
【问题描述】:

in-range 在 Racket 中返回一个流。 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

【问题讨论】:

    标签: stream racket


    【解决方案1】:

    是的,(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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-07
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2012-03-25
      • 1970-01-01
      相关资源
      最近更新 更多