Posted 2020-09-29 01:28:16 GMT
Common Lispには、prog1
、prog2
、progn
とありますが、Lispは0オリジンなのに、(nth 0)
な場所の値を返すprog1
、(nth 1)
な場所の値を返すprog2
、って整合性がないなあ、一方Scheme畑では、美しく、begin0
と命名する(Racket等)……という小話がありますが、なぜCommon Lispは1オリジン風なのでしょうか
;;; Welcome to Racket v7.8.
(begin0 0 1 2 3)
→ 0
Common Lispには、prog1
、prog2
、progn
とありますが、Lisp 1.5まで遡ると、prog2
しかありませんでした。
この時のprog2
は、2つのフォームをとれるフォームで最後の値を返すものでした。
これが、PDP-6 Lisp(1966)で、prog2
が可変長の引数を取れるように進化。値を返す場所は変更なし、ということで、「二番目のフォームの値を返す」もの、という感じになってしまいました。
続いて、progn
(1968あたり)、prog1
(1977あたり)が続きます。
可変長のフォームで、N番目のフォームの値を返す、というのは割合に発明だった気がしますが、命名則としてはねじれたことになってしまったようです。
■
HTML generated by 3bmd in LispWorks 7.0.0