id:eel3:20090307:1236401934 のCommon Lisp版の自作iotaにはSchemeっぽさが残っているというか、Common Lispっぽさが足りていないと思う。 Schemeは末尾再帰の最適化が仕様に含まれているけどCommon Lispでは含まれていない、というのは有名な話で、だから末尾再帰を最適化してループに展開して欲しい場合は処理系依存の機能に頼ることになる。 しかしそんな軟弱な態度じゃマズイだろう、ということでCommon Lispではループ用のマクロが多用される*1。 ということで、ループマクロの勉強を兼ねて書き直してみた。 まずはdotimes。iotaの第1引数はcountという名前だから、やはり繰り返す回数が大切なんだろうと考えて、dotimes。 ; dotimes 版その01 ; let が余分な感じに見える (defun iota (co
emacsでcmmon lispのプログラムを作成します。 emacsでcmmon lispのプログラムを作成します。 my-equal(A, B)= if A is an atom then if B is an atom then (eq A B) else if B is an atom then nil else if (car A)=(car B) then (cdr A)=(cdr B) else nil というのです。自分が考えたのは、 defun my-equal(x, y)= (cond ((atom x) (atom y)) (eq x, y) (atom) (t, nil) ((car x)=(car y) (cdr x)=(cdr y)) (nil)) というのでよろしいのでしょうか? また、4行目(この全文の)の意味がいまいち分かりません。 LISPでatomの数
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く