与 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# 列表中的一些东西(typeof
、sizeof
、delegate
以及 +=
等要么是 F# 中的函数,要么是不需要的完全没有)。
看起来它多了倍个运算符:
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# 列表中的一些东西(typeof
、sizeof
、delegate
以及 +=
等要么是 F# 中的函数,要么是不需要的完全没有)。