是否有一种编程语言使用了除(非扩展) ASCII 表中的字符以外的字符?

14

我不知道谁会做出这样的决定,但是否有这样一种语言?

我问这个问题的原因是(或者说是一些小事情,如果你喜欢),因为我刚刚完成了我的第八个版本的 “开发人员” dvorak 键盘布局(特别强调特殊字符)。目前有四个键没有用!

由于我永远不想尝试一个新的语言,只发现我的键盘布局缺少一个关键的特殊字符,所以我决定向社区提问。


如果除了基本字符没有任何其他字符的需求,那么未使用的键最好用于什么(当然,对程序员而言,这是SO的问题)?从 扩展 ASCII 表 中选择一些字符?还是故意让它们闲置并使用 AutoHotKey 来做一些酷炫的事情?


你有这个开发者Dvorak键盘布局的链接吗?听起来很有趣。 - RJFalconer
尚未,但如果有兴趣的话,我认为没有理由不在我的博客上发布相关内容。但实际上布局是 svorak(瑞典 dvorak)的修改版本,因为我来自瑞典,我需要我的 åäö 字符。;) - Mizipzor
是的,去codegolf.stackexchange.com,在那里你会找到很多例子。 - zoomlogo
它们都是编程语言,尽管有些是特殊目的的编程语言。 - zoomlogo
9个回答

20

是的,至少有一种编程语言可以实现: APL

这是用APL写的康威生命游戏:


(来源: wikimedia.org)

它使用了这个键盘映射:


一个完美的答案! :) 尽管在这之前我还希望有一些愚蠢的想法。 - Mizipzor
我喜欢这种语言从纯数学符号演变而来的事实,它有专门的Unicode符号,它们看起来真的很棒,而且大多数程序都比我刚写的这个句子要短。 - user458541
不是完美的答案...图片是热链接的,这使得它容易像现在这样中断... - Jasper

8

事实上,Haskell 的标准实现 GHC 如果需要,支持使用 Unicode 语法

{-# LANGUAGE UnicodeSyntax #-}

在文件顶部指定语言扩展。这使您可以在函数类型和lambda中使用,在类型类中使用,在列表推导式中使用等。

更精确地说,支持的语法是:

 ASCII   Unicode alternative
 ::      ∷ U+2237 PROPORTION
 =>      ⇒ U+21D2 RIGHTWARDS DOUBLE ARROW
 forall  ∀ U+2200 FOR ALL
 ->      → U+2192 RIGHTWARDS ARROW
 <-      ← U+2190 LEFTWARDS ARROW
 -<      ↢ U+2919 LEFTWARDS ARROW-TAIL
 >-      ↣ U+291A RIGHTWARDS ARROW-TAIL
 -<<       U+291B LEFTWARDS DOUBLE ARROW-TAIL
 >>-       U+291C RIGHTWARDS DOUBLE ARROW-TAIL
 *       ★ U+2605 BLACK STAR

此外,各种库提供Unicode运算符(利用Haskell对运算符名称中Unicode字符的支持):http://www.haskell.org/haskellwiki/Unicode-symbols

5

Fortress是一种数学/科学编程语言,由Java的Guy L Steele(在Sun任职期间)等人开发,广泛使用Unicode数学运算符等。

该语言不仅有定义好的ASCII表示形式,还有一个使用TeX将ASCII转换为“渲染”版本的定义方式。你也可以直接在源代码中使用Unicode运算符(据我所知),只是有些难打的内容提供了ASCII“快捷方式”(就这一点我承认不太确定)。

该网站提供了源代码及其如何被渲染的示例


3

C#允许变量包含Unicode字符。例如,ɢ(拉丁小型大写字母G,U+0262)是C#变量中完全有效的字符。


1
此外,Java、Python、Haskell等大多数现代编程语言都支持自定义Unicode运算符,其中Lisp家族语言、Haskell和Scala尤其擅长此项功能。 - Mechanical snail

2

旧版Macintosh Programmer's Workshop (MPW)的脚本语言使用了许多非ASCII字符来实现基本上是Unix shell版本的功能。事实上,一些文档仍然可用。例如,它使用∑进行重定向。


我喜欢MPW在重定向方面使用字符的方式;它有单独的字符来重定向stdout、stderr或两者。我不确定在Unix中是否有类似的方法。 - supercat
“有些文档仍然可用。” 现在不再可用,该URL现在重定向到一个落地页。但是,Wayback Machine缓存了该页面(2011年2月):http://web.archive.org/web/20110215081951/http://developer.apple.com/tools/mpw-tools/commandref/appc.html - user458541
@Alhadis,时间会冲淡一切,我想是这样。感谢万能的Wayback Machine! - ebneter

1

这个算吗?

Python的中文版本
http://www.chinesepython.org/doc/tut/tut/node3.html

中文:

>>> 甲 = 12
>>> 乙 = 3
>>> 甲 + 乙
15
>>> 甲 + 乙**乙
39
>>> 甲 = 0 #(可以重新指定值)
>>> 乙 = 甲 + 1
>>> 寫 乙
1

中文:

>>> j = 12
>>> y = 3
>>> j + y
15
>>> j + y**y
39
>>> j = 0
>>> y = j + 1
>>> print y
1

是的,但语法使用中文吗?我无法确定。 - CommaToast

1

我对 F# 进行了修改: https://github.com/Heather/fsharp

let ° msg = System.Console.WriteLine( msg.ToString() )

let ◄ = 5
let ★ x = x + ◄
let (-★-) x y = x + y

let © = "© 2013"

let ► =
    fun x -> 2 + x

sprintf  "Heather %s" project version © |> °
► ◄ |> fun ▼ ->
    ★ <| (▼ -★- ▼) |> °

扩展字符在这里是允许的,但它们并不是语言本身的语法的一部分。因此,它并不真正算数。 - CommaToast

1
Perl 6具有可选的Unicode运算符,以及添加用户定义运算符的能力。
在重新映射键之前,您可能不应该等待它。我不知道Rakudo是否已经可以使用Unicode运算符。

1

PL/I使用倒立的L字符作为“非”运算符;我曾经使用过的VM360使用“^”作为ASCII等效符号(我认为EBCDIC没有“^”)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接