代码之家  ›  专栏  ›  技术社区  ›  J Cooper

基本F#问题:易变性、大小写标准、函数与方法

  •  1
  • J Cooper  · 技术社区  · 17 年前

    我这个月刚开始发布新版本。我对OO和函数式语言(Haskell和Scheme,但不是OCaml/ML)都有一些背景知识。到目前为止,在阅读F#CTP附带的小教程时,出现了几个问题。

    2) 我对所使用的大写字母有点困惑。在本教程代码文件中,函数有时以小写字母开头,有时以大写字母开头。我知道MS倾向于使用带有函数和方法的首字母大写,但这里似乎有两种方法。这对我来说没什么大不了的,因为我只是在自己的时间里玩,但我很好奇标准是什么。

    print_string "string" 有道理,但这里是 List.map fn list (除非列表只是名称空间,否则请原谅)。那么这就是 str.Length . 有人想澄清什么时候使用什么,哪个是首选的吗?

    谢谢

    3 回复  |  直到 17 年前
        1
  •  5
  •   Brian    17 年前

    关于易变性:F#允许你务实。我很少喜欢状态monad而不是可变/ref,但是你可以做任何你喜欢的事情。Monad并不是被回避的,但我认为人们倾向于只在获得明确胜利时才使用Monad(例如异步编程)。

    关于功能风格:我不清楚你在问什么。对于List.map,“List”是F的名称# ,而“map”是该模块中的一个函数。成员函数(例如str.Length)具有在整个.Net中普遍使用的优点,并在编辑器中提供了良好的intellisense体验。

        2
  •  5
  •   Gabriel    17 年前

    1) 我不想说单子是被回避的。。。您提到您对Haskell有一定的背景-因此,您希望研究的是F#工作流(工作流这一术语可能令人困惑,但它们与业务流程的内容只有一点点关系)。一般来说,序列表达式和更一般的计算表达式(也称为工作流)将接近单子。虽然我不确定“首选”是否是表达它的方式,但是说可变是相当普遍的。他们每个人都有自己的位置——就我个人而言,我从两本书开始——《F#的基础》——但如果你想深入其中——去读《F#的专家》——这两本书都不错。老实说,我需要基金会来帮助我开始。

    希望这有助于。。。信不信由你,当你使用F和思考其他语言,共享概念C++与C(例如)-它变得更容易。就个人而言,命名开始变得有意义,概念也开始发挥作用,因为我开始意识到我是一个F#是一种在传统平台上运行的函数式语言,是为互操作而设计的(尽管我不确定称互操作无缝是否合适:D)

        3
  •  2
  •   Ganesh Sittampalam    17 年前

    一般来说,单子(F#中的“工作流”)比Haskell中的少很多,首先是因为可变变量可用,所以人们不太可能选择使用状态单子。其次,没有更高级的类型变量,这意味着您不能编写重载的代码来处理任何monad,这使得使用它们的吸引力大大降低。

    它们常用的一个地方是序列表达式(这与Haskell中的列表理解非常相似,但它们与列表单子密切相关)。

    推荐文章