Posted 2021-06-29 20:10:21 GMT
先日redditで、MACLISPの子孫でifのelse部が可変長なのを受け継いだのがEmacs Lispだけなのは何故かという質問がありました。
諸説ありますが、私は、「RMSの趣味」説を提唱したいです。
if
の由来ただその前にまずMACLISPのif
がMACLISP系方言にMACLISPから伝搬していったという前提がまず微妙で、if
の仕様がMACLISPに由来するという前提がはっきりしなさそうです。
意外にもMACLISP系方言での標準的なif
が成立するのは比較的新しく1978年あたりになりますが、現在メジャーなCommon LispやSchemeif
の形式以外にバリエーションが多数ありました。
この辺りの流れをみると同時多発的にMACLISP方言にif
が導入された様子で、下記の1978年のMACLISPのメーリングリストの議論を眺めるにその形式も揺れていたことがわかります。
そんなelse部が可変長のif
形式ですが、少なくともLisp Machine LispとMACLISPでは採用されていました。MACLISPの方はいつ実装されたのかは不明なのですがLisp Machine Lispの方は記録が残っており、1979-07-20にAGRE氏によりelse部を可変長にしたらどうかという提案があったのを受けて、
RMSが1979-07-22日にLisp Machine Lispに機能を実装したようです。
I made the extension to IF for multiple else-clauses.
There seems to be no need for an IF-NOT macro when
(IF (NOT ...) ...) will work just as well with only 2 more characters.
拡張と書いているので、Lisp Machine Lispでは、当初は、Common Lispと同じif
の形式だった可能性もあります。しかしこの時期のLispマシンのソースコードが残っていないので詳細は分からず……。
そしてこの可変長のelse部のifですが、Lisp Machine Manualを眺めるに賛否両論があった様子。
Chinual 2では可変長だという説明はありませんが、Chinual 4では、else部が可変長であることと、その利用についてはプログラミングスタイルとして賛否があるという記述があり、Chinual 5で可変長についての記述はまた消えます。
ただし記述は消えるものの、Lisp Machine Lispとしてはifのelse部は可変長であり続けたようでSymbolicsのZetalisp等も受け継ぎました。
さてここでRMSですが、RMSの発言等を古いメーリングリストで眺めていると、RMSのLispについての好みは非常に一貫していて、後に自身が実装したLisp処理系であるEmacs Lispの仕様と照らし合わせてみても、まったくぶれがありません。
この辺りを鑑みるにLispマシングループでifのelse部の可変長について議論あった際にはRMSは可変長else派であったのではないでしょうか。
そして自らのLisp実装には可変長elseのif
を採用するのは自然なのでEmacs Lispのifもelse部が可変長、ということになったのではないでしょうか。
以上が私の「ifのelse部が可変長なのはRMSの趣味」説です。
RMSのLispの好みの一貫性については、非常に面白いのでいつかまとめてみたいところです。
■
HTML generated by 3bmd in LispWorks 7.0.0