如果 Ascii 运算符是可定义的,为啥不是 Unicode 符号?

Posted

技术标签:

【中文标题】如果 Ascii 运算符是可定义的,为啥不是 Unicode 符号?【英文标题】:If Ascii operators are definable, why not Unicode Symbols?如果 Ascii 运算符是可定义的,为什么不是 Unicode 符号? 【发布时间】:2010-11-12 14:03:46 【问题描述】:

我相信我和许多人一样很高兴终于有了一种与主流 GUI/数据库/通信框架紧密相关的强大语言。

我不知道在哪里发布,但这里似乎是最好的地方。

我需要使用 Unicode 符号字符作为运算符或函数名。我想要语法糖,但我不需要它。

Guy Steele 在 Communications of the ACM 中指出,“*”是从 Ascii 中作为乘法采用时的强制选择,但我的软件在 Unicode 中工作,因此我不再受 Ascii 的束缚。

!$%&*+-./?,@^|~:

本地化的一部分包括本地程序员。为什么要限制可以在 F# 中定义的运算符集?它与 C# 和 F# 在标识符中接受许多 Unicode IsLetter 并不正交。

此外,F# 很可能用于逻辑、数学、物理学家等问题的符号处理。如果直接映射到基本运算符的语言,它会使工作变得更加容易。 (F# 和 C# 接受许多 Unicode IsLetter? 以及 IsDigit'?这是一个允许 Unicode IsSymbol 的请求?作为具有优先级的运算符,例如,*,或者,因为“+”既是一元运算符又是二元运算符,我可以忍受 + 的优先级,并用带括号的分组来弥补差异。

考虑逻辑学家、数学家、物理学家等特定领域的需求。我宁愿使用数学符号编写符号微分器或积分器,而不是已采用运算符的 Ascii 排列。

逻辑:∀ ∃ ⇒ 数学:∑ ∫ ∂ 群论:≤ ≥ ∈ ∉ 集合论:⊆ ⊇ ⊃ ∪ ∩ 张量:⊗

我用其他语言编写过很多语言,但由于 F# 与 .Net 紧密集成,因此在没有语言支持的情况下,这个问题带来了特殊挑战:

拼凑一个翻译器,将 Unicode 运算符 F# 源代码逐行映射到 Ascii 运算符 F# 源代码,这很简单。

但在调试时,我如何确保程序员仍能看到未翻译的源代码?他们可以看到变量值。

运算符和转换它们是微不足道的。但是我如何确保翻译是被编译的,而程序员看到他们自己的源代码?如果我正确地逐行映射,我如何确保它们仍然可以指向一个变量并看到它的值?

【问题讨论】:

我添加了 f# 标签,但要这样做,我必须去掉 math 标签。我认为这是一个公平的交易(这里的核心问题是人们现在可能关心的问题,而不是数学家思考的问题) 另见cs.hubfs.net/forums/thread/9690.aspx 【参考方案1】:

Visual Studio Gallery 中有一个适用于 F# 的数学 (Unicode) 符号扩展。

这允许您定义 Unicode 符号,例如:

let inline (~∑) xs = xs |> Seq.sum

let total = ∑myList

【讨论】:

【参考方案2】:

您可能对Project Fortress 感兴趣,它是一种新的函数式编程语言,它包含 Unicode 字符集(以及许多其他特性)。特别是,请参阅包含一些示例代码的 Mathematical Syntax in Fortress 页面。

【讨论】:

我对 F# 很感兴趣,因为 .Net 可用于创建任何不需要 C++ 性能的应用程序。 Project Fortress 听起来很有趣。谢谢。 看来这个项目已经停止了。 en.wikipedia.org/wiki/Fortress_(programming_language)【参考方案3】:

有关此检查的有趣讨论:http://cs.hubfs.net/forums/thread/9690.aspx

【讨论】:

这个答案重复了上面布赖恩的评论。【参考方案4】:

其他语言,例如 Scala,确实允许 ASCII 范围之外的运算符 -- 数学符号 (Sm) 和其他符号 (So)

【讨论】:

以上是关于如果 Ascii 运算符是可定义的,为啥不是 Unicode 符号?的主要内容,如果未能解决你的问题,请参考以下文章

EF Core - 为啥 ClientSetNull 是可选关系的默认 OnDelete 行为(而不是 SetNull)

如果比较函数不是运算符 <,为啥 std::sort 会崩溃?

字符型变量C为啥直接可以和ASCII码比较呢?

Swift:如果变量 a 是非可选的,那么为啥变量 b 是可选的? [复制]

为啥 UITextField.text 是可选的?

python判断两个代数式本质上是不是一样?