Arcでは「define」や「lambda」という「単語」を廃止して、「def」や「fn」のような「略語」にしてある。
これは実はかなり重要な事のような気がしている。


というのは、「lambda」はともかく、「define」は、英語の元の単語と全く同じ文字列だ。
しかし、その「define」の語が指す内容について考えてみると。
英語と(Lisp系)プログラミング言語ではそもそものパラダイムが違うので、「英語内での"define"の立ち位置」と「プログラミング言語内での"define"の立ち位置」こそ似ているものの、その実体については大きく違うと言ってよい。
(「英語での"define"」は「人が特定の言語的操作を行う動詞」で、「Lisp系言語での"define"」は「特定のシンボルに特定の内容を束縛する命令」。多分。)
要するに、「define」や「lambda」では、英語の元の意味が抜けきっていないので、不便な点がある。
例えば、「"define"は特定のシンボルの内容を定義します」と日本語で書いた時、別に混乱はしないけど、「"定義"は特定のシンボルの内容を定義します」と言われると、ちょっと混乱すると思う。英語圏のプログラミング入門者は、これの英語版問題に相対し、混乱し、どうにか理解してからやっと、先のステップへ進んでいるのではないかと思う。
(よって、プログラミング初心者に「なでしこ」を使わせるのは実は問題があるのでは?と思う。)
なので、「英語でのdefineの意味にちょっと似てるけれども、実体は違う操作だ」という事を示すのに、略語化というのは、結構有効なのではと思う。
で、それを既に行っている先例が、アセンブリ言語の「MOV」とか「LD」とかのニーモニックだった。
そして、そのアセンブリ言語の洗礼を受けた「car」「cdr」だった。
よって、「car」「cdr」を「first」「rest」にするなんていうのは、個人的にはマイナス効果しか無いと思う。「fst」「rst」なら許せる。
しかし、Haskellの、tupleのアクセサが「fst」「snd」で、pairのアクセサが「head」「tail」なのは、単語の割り当てを微妙に間違ってるとも思う。
とは言え、この辺(単語の割り当て)は個人の好みが大きいので、万人にとってのベスト解は無いような気はしてる。
そして、根本的には、英語にはcar、cdrに相当する単語は無いので、無理に英単語にマッピングせずに、carはcar、cdrはcdrでいいと思う。


とりあえず、今回の結論としては、「ニーモニックの命令命名法は実は先進的だった」「Arc素敵」「car、cdrは素晴らしい」辺りで。