【问题标题】:Why is the hyphen conventional in symbol names in LISP?为什么 LISP 中符号名称中的连字符是常规的?
【发布时间】:2011-02-04 16:26:10
【问题描述】:

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

【问题讨论】:

  • 既然 Lisp 是现存最古老的计算机语言之一,你可能会反过来问这个问题。
  • 第二。此外,我喜欢连字符分隔。也许其他语言也希望拥有它,但他们只需要提供中缀运算符。
  • 我希望在用其他语言编程时可以在标识符中使用连字符。我讨厌标识符中的下划线。
  • 在我用过的每个键盘上,下划线需要两个手指,而连字符只需要一个手指。

标签: lisp naming-conventions punctuation


【解决方案1】:

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

历史

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

因为你可以

在 LISP 中,没有中缀运算符(嗯,很少)。因此,x-1 是指“x 减 1”还是“x 连字符 1”,这一点没有歧义。早期的先驱者喜欢多字符号的连字符的外观(或者也被困在 ASR-33 上:)。

【讨论】:

  • +1 另外,早期的 Lisps 只有大写字母,所以不可能使用 CamelCase。
  • Gareth:这并不奇怪,因为 Lisp 早于 ASCII。 :-)
【解决方案2】:

只是猜测:可能是因为它类似于英语的复合词(如“知名”、“旋转木马”等)。正如 Paul 在评论中所说,它是最古老的语言之一,对于 LISP 的创建者来说,连字符可能看起来比下划线更自然。

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

【讨论】:

    【解决方案3】:

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

    Hofbräuhaus
    

    以上由三部分组成:Hof bräu haus。

    但是当我们用德语写概念时,我们会这样写:

    Mubarak-Regime
    

    在自然语言中,用 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
    

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

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多