(do ((i 1 (1+ i))) ((< 5 i) (princ "End")) (princ i)) ;-> 12345End
1969年(Maclisp)
最初の形式は、
(do i 0 (1+ i) (print i))
というもので、複数のループ変数を取り扱うことができなかった。
現在主流のCommon Lispと同じ書法は、1972年に導入されたとある。
さらに、1973年に第三の形式として、
(do <var-specs> nil body...)
のような形式が導入された、これはCommon Lispで書くならば、
(let <var-spec> body...)
のようなものを実現するために導入された。
意外にもletの登場は、これよりもずっと遅く、1979年頃Lispマシン上に登場した。
それまでは、代わりにlambdaや、progを使っていた様子で、このような経緯よりdoの3番目の書式が導入されたものと思われる。
なおCommon Lispで有効なのは、2番目の書法のみである。