如果可以定义Ascii运算符,为什么不使用Unicode符号?

时间:2009-07-21 09:07:07

标签: unicode f# operators symbols localization

我确信我和很多人一起感到高兴,最终有一种强大的语言与主流的GUI /数据库/通信框架紧密相连。

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

我需要将Unicode符号字符用作运算符或函数名称。我喜欢语法糖,但我不需要它。

Guy Steele在ACM的通讯中指出,当从Ascii采用它时,“*”是一种强制选择,但是我的软件在Unicode中工作,所以我不再受Ascii限制了。

$%&安培; * + - /< =>,@ ^ |〜:?

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

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

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

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

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

将一个采用Unicode-operator F#source并逐行映射到Ascii-operator F#source的转换器,这是微不足道的。

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

let total = ∑myList

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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