https://ocaml.org/api/Stream.html
val from : (int -> 'a option) -> 'a t
Stream.from f返回从函数构建的流f。要创建新的流元素,f请使用当前流计数调用该函数。用户函数f必须返回Some <value>一个值或None指定流的结尾。请注意,在一般情况下,传递给的索引
f可能不会开始。0例如,第一次[< '0; '1; Stream.from f >]调用时会使用 count 。f2
这个例子有两件事让我困惑。
我没有运气用谷歌搜索[< ... >]语法的含义。我发现的最接近的是: https: //ocaml.org/manual/lex.html#sss :keywords,它只是说这些字符序列是关键字
[< ... ]似乎在打印时使用,但不定义多态变体: https: //ocaml.org/manual/polyvariant.html
如果我粘贴类似的内容,[< '0; '1; >]我会收到语法错误。
所以目前我对这个例子想要展示的内容感到非常困惑。
该示例表示第一次[< '0; '1; Stream.from f >]调用时会使用 countf2
我只是想知道......为什么?如何?我可以看到,这是从和2开始的,但是这些值如何影响 的起始值?(为什么它们带有前缀?)'0'1f'
已弃用的 Stream 模块旨在与 camlp{4,5} 语法扩展一起使用,该扩展添加了对[< ...>]. 有关更多文档,请参阅https://camlp5.github.io/doc/html/parsers.html 。
但是,如果您不维护遗留代码,您可能希望Stream完全避免该模块并使用该Seq模块。特别是,Stream从 OCaml 5.0 开始,不会成为标准库的一部分。