【入門】Common Lisp その9【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0359デフォルトの名無しさん
2012/06/20(水) 17:04:38.36関数my-length2、実装速度:速、使用メモリ:大
を意図して次の2つの関数を定義しました。
(defun my-length1 (lst)
(labels ((rec (lst acc)
(if (null lst)
acc
(rec (cdr lst) (1+ acc)))))
(rec lst 0)))
(labels ((rec (lst acc)
(if (null lst)
acc
(rec (cdr lst) (1+ acc)))))
(defun my-length2 (lst) (rec lst 0)))
しかし、disassembleしてみると、
両者は同等のアセンブリコードにコンパイルされていました (SBCL)。
上の関数my-length1は呼び出される度に局所関数を生成し、
下の関数my-length2は関数が定義時に局所関数が一度だけ生成される、
と思っていたのですが違いました。
上の意図のような使い分けをするための方法はあるのでしょうか?
情報をいただけるとうれしいです。
■ このスレッドは過去ログ倉庫に格納されています