つい最近まで知りませんでした… Schemeを使っている方には「letで末尾再帰するときのアレをEmacsでも使えるようにする」というので通じるとは思うのですが… 総和っぽいのを求める関数を定義してみましょう。 (defun sum-rec (n &optional sum) (if (<= 0 n) (sum-rec (1- n) (+ n (or sum 0))) sum)) (sum-rec 100) ;=> 5050 アルゴリズムも使い方もめちゃ簡単なのですが、この実装には問題があります。 Lispに限らずよくあるプログラミング言語には、関数呼び出しの「深さ」と、その上限という概念があります。関数呼び出しをして、呼び出された関数から関数を呼ぶと深さは1追加され、その関数が実行終了すると深さは1減ります。 なぜこの呼び出しの深さという数が大事なのかというと、一般的なプログラムでは繰り
