为什么连字符在LISP中的符号名称中是常规的?

Tho*_*son 8 lisp naming-conventions punctuation

这个建议的原因是什么?为什么不与其他使用下划线的编程语言保持一致?

WRe*_*ach 15

我认为LISP使用连字符有两个原因:"历史"和"因为你可以".

历史

LISP是一种古老的语言,在早期键入下划线可能具有挑战性.例如,我用于LISP的第一个终端是ASR-33电传打字机.在某些主机和电传打字机型号上,下划线字符的键序列将被解释为左指向箭头(Smalltalk中的赋值运算符).可以更可靠地输入连字符.

因为你能

在LISP中,没有中缀运算符(很少,很少).因此,无论是否x-1意味着"x减1"或"x连字符1" ,都没有歧义.早期的开拓者喜欢多字符号的夸张外观(或者也被卡在ASR-33上:).

  • +1此外,早期的Lisps只有大写字母,因此不可能使用CamelCase. (6认同)
  • Gareth:这并不奇怪,因为Lisp早于ASCII.:-) (6认同)

mik*_*1aj 11

只是一个猜测:可能是因为它类似于英语的复合词(如"众所周知的","旋转木马"等).就像保罗在评论中说的那样,它是最古老的语言之一,对于LISP连字符的创造者来说,连字符似乎比例如下划线更自然.

旁注:我个人喜欢它,因为它分隔单词,但同时使长标识符看起来像一个整体(比较fooBarBaz,foo-bar-bazfoo_bar_baz).


Rai*_*wig 5

在书面自然语言中, - 符号通常用作制作复合词的方法.例如,在德语中,我们只是通过附加它们来组成德语名词:

Hofbräuhaus
Run Code Online (Sandbox Code Playgroud)

以上由三部分组成:Hofbräuhaus.

但是当我们用德语写出以外国名字为代表的概念时,我们就像这样写:

Mubarak-Regime
Run Code Online (Sandbox Code Playgroud)

在自然语言中,通过CamelCase或Under_Score撰写单词并不常见.

大多数Lisps的设计更倾向于语言传统.在某些语言中使用下划线的约定出现了,因为在这些语言中, - 符号已被用于减号操作,并且这些标识符不允许包含 - 符号. - 符号是这些语言中终止字符的标识符.不是在Lisp中.

请注意,虽然可以在Lisp标识符中使用下划线,但出于美观原因,这在代码中很少使用.

也可以使用标识符中的每个字符.垂直条包含一个任意符号:

|this *@^! symbol is valid - why is that po_ss_ib_le?|

> (defun |this *@^! symbol is valid - why is that po_ss_ib_le?| (|what? really?|)
              (+ |what? really?| 42))
|this *@^! symbol is valid - why is that po_ss_ib_le?|

> (|this *@^! symbol is valid - why is that po_ss_ib_le?| 42)
84
Run Code Online (Sandbox Code Playgroud)

请注意,反斜杠是符号名称中的转义字符.