13

我相信我和许多人一样很高兴终于有了一种与主流 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 排列。

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

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

拼凑一个接受 Unicode 运算符 F# 源并将其逐行映射到 Ascii 运算符 F# 源的翻译器是微不足道的。

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

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

4

4 回答 4

3

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

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

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

let total = ∑myList
于 2013-02-05T15:56:34.987 回答
1

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

于 2009-07-21T09:28:07.123 回答
1

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

于 2009-07-21T12:00:16.847 回答
1

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

于 2009-07-22T06:39:06.943 回答