#:g1: Lispのシンボルにアンダーバーが使われない理由を探る

Posted 2021-12-14 19:39:20 GMT

Lisp一人 Advent Calendar 2021 15日目の記事です。

Lispのシンボル名では、単語の繋ぎとして-が多用されていることはご存知のとおりですが、他の言語では良く使われる_がLispでは使われない理由は良く分かりません。
_より読み易い-が使えるから、というのも理由にはなると思いますが、極初期のLisp Machine Lispでは、_で単語を繋いだりもしたようです。

GET_PNAME <symbol> [QFCTNS]

This works, but GET-PNAME is preferred.

MAKE_ATOM &REST <args> [QFCTNS]

This works, but MAKE-ATOM is preferred.

などですが、すぐに非推奨となり-に置き換えられたりはしたようではあります。

Lispが良く使われていた環境では_のコードが確定していなかった?

そんな_ですが、先日マッカーシー先生のHistory of Lisp(1978)の原稿をSaildartで発見したので眺めていたところ、ヒューイット先生からのメール経由でのレビューも発見しました。

このメールの中で、ヒューイット先生はメッセージ送信形式のevalというものを紹介しているのですが、

(defun lexical←apply (procedure arguments expression)
...

のように単語の繋ぎにを使っています。
これは、メッセージ送信だからかとも思ったのですが、SAILの文字コードは結構特殊なため、元の文字コード確認してみたところ、ASCIIやMITでは、_が、8進で#o137ですが、SAIL、CMU、ISIでは、文字コード#o137は、のようなのです。

つまりヒューイット先生は、MITからのメールで

(defun lexical_apply (procedure arguments expression)
...

とアンダーバー繋ぎで書いていたけれど、SAILの環境ではと表示されてしまうのではないかと推測されます(もしくはデータ復元の際にSAILコードとして復元された)

1977年当時はまだ-繋ぎも確立する程でもなかったので、_が使われたと考えると、『_は1970年代のLisp社会では、環境依存文字だったのに対し、-はどの環境でも統一されていたから好まれた』説を提唱したいところです。

ちなみに、Interlisp方面では、-繋ぎではなく、代りに.繋ぎが良く使われました。 これも謎ですが、clispという自然言語風記法で1+x1-xと記述できたため、曖昧さを避けて、lexical.applyのように記述することにしたのかなと想像しています。

関連


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus