1

我正在尝试学习 F# 计算表达式。一般来说,零会员的目的是什么?

它对序列的定义是什么?

它对异步工作流的定义是什么?

4

1 回答 1

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值。

如果你想了解更多的理论背景,那么你可以查看这篇论文。用更理论的术语来说,它Zero要么是return ()(当计算是单子时),要么是幺半群的单位(当计算是幺半群时),这就是 Haskellers 所说mzero的。

于 2012-12-09T01:17:32.727 回答