Почему дефис используется в именах символов в LISP? - PullRequest
8 голосов
/ 04 февраля 2011

В чем причина этой рекомендации? Почему бы не поддерживать соответствие с другими языками программирования, которые вместо этого используют подчеркивание?

Ответы [ 3 ]

15 голосов
/ 04 февраля 2011

Я думаю, что LISP использует дефис по двум причинам: «история» и «потому что вы можете».

История

LISP - старый язык, и в первые дни он набиралПодчеркивание может быть сложным.Например, первым терминалом, который я использовал для LISP, был телетайп ASR-33 .На некоторых моделях хостов и телетайпов последовательность клавиш для символа подчеркивания будет интерпретироваться как стрелка, указывающая влево (оператор присваивания в Smalltalk).Дефисы могут быть набраны более надежно.

Поскольку вы можете

В LISP нет инфиксных операторов (ну, мало).Таким образом, нет никакой двусмысленности относительно того, означает ли x-1 «x минус 1» или «x дефис 1».Ранним пионерам понравился внешний вид гипса для символов из нескольких слов (или они также были прикреплены к ASR-33:).

11 голосов
/ 04 февраля 2011

Просто предположение: это может быть потому, что оно напоминает сложные слова английского языка (например, «хорошо известный», «карусель» и т. Д.). Как сказал в комментарии Пол, это один из самых старых языков, и для создателей LISP дефис мог показаться более естественным, чем, например, подчеркивание.

Примечание: лично мне это нравится, потому что оно разделяет слова, но в то же время заставляет длинный идентификатор выглядеть в целом (сравните fooBarBaz, foo-bar-baz и foo_bar_baz).

5 голосов
/ 05 февраля 2011

В письменных естественных языках знак - часто используется как способ составления слов.Например, на немецком языке мы сочиняем немецкие существительные, просто добавляя их:

Hofbräuhaus

Выше мы состоим из трех частей: Hof bräu haus.

Но когда мы пишем понятия на немецком языке, которые имеют иностранные имена каксо своей стороны мы пишем их так:

Mubarak-Regime

В естественных языках не принято составлять слова CamelCase или Under_Score.

Дизайн большинства Лиспов был более ориентирован на лингвистическую традицию,В некоторых языках было принято соглашение использовать подчеркивание, потому что в этих языках знак «-» уже был принят для операции «минус», а идентификаторы тезисов не позволяли включать знак.Знак - является символом окончания идентификатора в этих языках.Не в 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

Обратите внимание, что обратный слеш является escape-символом в именах символов.

...