请在 Stream 文档中解释这个例子,什么是 [< >] 语法?
Please explain this example in the Stream docs, what is [< >] syntax?
https://ocaml.org/api/Stream.html
val from : (int -> 'a option) -> 'a t
Stream.from f
returns a stream built from the function f
. To create a new stream element, the function f
is called with the current stream count. The user function f
must return either Some <value>
for a value or None
to specify the end of the stream.
Do note that the indices passed to f
may not start at 0
in the general case. For example, [< '0; '1; Stream.from f >]
would call f
the first time with count 2
.
这个例子有两点让我感到困惑。
1.
我没能用谷歌搜索 [< ... >]
语法的含义。我找到的最接近的是:https://ocaml.org/manual/lex.html#sss:keywords,它只是说那些字符序列是关键字
[< ... ]
似乎在打印但未定义多态变体时使用:https://ocaml.org/manual/polyvariant.html
如果我粘贴类似 [< '0; '1; >]
的内容,我会收到语法错误。
所以我目前对这个例子想要展示的内容感到非常困惑。
2.
这个例子说 [< '0; '1; Stream.from f >]
会第一次调用 f
计数 2
我只是想知道...为什么?如何?我可以看到 2
紧随 '0
和 '1
,但这些值如何影响 f
的起始值? (为什么它们的前缀是 '
?)
已弃用的 Stream 模块被构建为与 camlp{4,5} 句法扩展一起使用,该扩展增加了对 [< ...>]
的支持。有关更多文档,请参阅 https://camlp5.github.io/doc/html/parsers.html。
但是,如果您不维护遗留代码,您可能希望完全避免使用 Stream
模块,而改用 Seq
模块。特别是,Stream
不会成为从 OCaml 5.0 开始的标准库的一部分。
https://ocaml.org/api/Stream.html
val from : (int -> 'a option) -> 'a t
Stream.from f
returns a stream built from the functionf
. To create a new stream element, the functionf
is called with the current stream count. The user functionf
must return eitherSome <value>
for a value orNone
to specify the end of the stream.Do note that the indices passed to
f
may not start at0
in the general case. For example,[< '0; '1; Stream.from f >]
would callf
the first time with count2
.
这个例子有两点让我感到困惑。
1.
我没能用谷歌搜索 [< ... >]
语法的含义。我找到的最接近的是:https://ocaml.org/manual/lex.html#sss:keywords,它只是说那些字符序列是关键字
[< ... ]
似乎在打印但未定义多态变体时使用:https://ocaml.org/manual/polyvariant.html
如果我粘贴类似 [< '0; '1; >]
的内容,我会收到语法错误。
所以我目前对这个例子想要展示的内容感到非常困惑。
2.
这个例子说 [< '0; '1; Stream.from f >]
会第一次调用 f
计数 2
我只是想知道...为什么?如何?我可以看到 2
紧随 '0
和 '1
,但这些值如何影响 f
的起始值? (为什么它们的前缀是 '
?)
已弃用的 Stream 模块被构建为与 camlp{4,5} 句法扩展一起使用,该扩展增加了对 [< ...>]
的支持。有关更多文档,请参阅 https://camlp5.github.io/doc/html/parsers.html。
但是,如果您不维护遗留代码,您可能希望完全避免使用 Stream
模块,而改用 Seq
模块。特别是,Stream
不会成为从 OCaml 5.0 开始的标准库的一部分。