与 C 语言 (C#) 相比,为什么 ML 语言 (F#) 有这么多不同的运算符?

Why do ML languages (F#) have so many different operators compared to C languages (C#)?

看起来它多了个运算符:

https://msdn.microsoft.com/en-us/library/dd233228.aspx

https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

这仅仅是让语言看起来 "succinct" 或历史 ML 根源所付出的代价吗?

我不确定查看来自 MSDN 的两个列表一定能给出公平的比较。请注意,F# table 列出了任何使用符号字符作为表达式一部分的内容 - 这包括字符串文字 "、注释 ///、预处理器指令 #、引号、泛型的语法等等。另一方面,C# 参考仅列出运算符(尽管也有一些关键字)。

的确,F# 的运算符比 C# 多几个,但我认为差异并不像您想象的那么大。最没有table的是:

  • 用于处理 >>|>(以及这些函数的变体)等函数的运算符
  • 用于处理 ::(前置元素)和 @(串联)等列表的运算符
  • 用于处理可空值的运算符(许多在某些方面带有 ?),尽管我认为这些更多是启用 LINQ 互操作的解决方法,而不是 F#[=24= 的基本运算符]

  • mutable ref cells :=! 有一些运算符 - 我认为这些主要是 ML 遗产,你真的不需要他们经常。

所以,我认为最主要的是 F# 只是多了一些处于函数式编程核心的数据类型,并且它有用于处理它们的运算符(尤其是函数和列表)。另一方面,C# 列表中的一些东西(typeofsizeofdelegate 以及 += 等要么是 F# 中的函数,要么是不需要的完全没有)。