|
|
1
5
关于易变性:F#允许你务实。我很少喜欢状态monad而不是可变/ref,但是你可以做任何你喜欢的事情。Monad并不是被回避的,但我认为人们倾向于只在获得明确胜利时才使用Monad(例如异步编程)。
关于功能风格:我不清楚你在问什么。对于List.map,“List”是F的名称# ,而“map”是该模块中的一个函数。成员函数(例如str.Length)具有在整个.Net中普遍使用的优点,并在编辑器中提供了良好的intellisense体验。 |
|
|
2
5
1) 我不想说单子是被回避的。。。您提到您对Haskell有一定的背景-因此,您希望研究的是F#工作流(工作流这一术语可能令人困惑,但它们与业务流程的内容只有一点点关系)。一般来说,序列表达式和更一般的计算表达式(也称为工作流)将接近单子。虽然我不确定“首选”是否是表达它的方式,但是说可变是相当普遍的。他们每个人都有自己的位置——就我个人而言,我从两本书开始——《F#的基础》——但如果你想深入其中——去读《F#的专家》——这两本书都不错。老实说,我需要基金会来帮助我开始。
希望这有助于。。。信不信由你,当你使用F和思考其他语言,共享概念C++与C(例如)-它变得更容易。就个人而言,命名开始变得有意义,概念也开始发挥作用,因为我开始意识到我是一个F#是一种在传统平台上运行的函数式语言,是为互操作而设计的(尽管我不确定称互操作无缝是否合适:D) |
|
|
3
2
一般来说,单子(F#中的“工作流”)比Haskell中的少很多,首先是因为可变变量可用,所以人们不太可能选择使用状态单子。其次,没有更高级的类型变量,这意味着您不能编写重载的代码来处理任何monad,这使得使用它们的吸引力大大降低。 它们常用的一个地方是序列表达式(这与Haskell中的列表理解非常相似,但它们与列表单子密切相关)。 |