我正在尝试学习F#计算表达式。一般来说,零成员的目的是什么?
它对序列的定义是什么?
异步工作流程的定义是什么?
答案 0 :(得分:6)
例如,当您在Zero
表达式中省略else
分支时,会使用if
成员:
comp { if b then return 1
return 2 }
...将被翻译成这样的东西:
comp.Combine
( if b then comp.Return(1) else comp.Zero(),
comp.Return(2) )
如何为标准计算类型定义?
对于异步工作流,它被定义为立即返回单位值的异步工作流 - 基本上等同于编写:async { return () }
。
对于序列(使用yield
而不是return
),Zero
成员返回一个不返回任何内容的序列,对应于标准Seq.empty
值。
如果您想了解更多理论背景,那么您可以check out this paper。在更理论的术语中,它表示Zero
要么是return ()
(当计算是monad时),要么它将是monoid的单位(当计算是幺半群时)这是Haskellers称之为mzero
的东西。