再帰に対する考え方を教えてくれた練習問題
確か『LISP I』だったと思うけど、次のような練習問題があった。
2 つの引数をとり、その 2 つの値の合計を返す関数を書け。ただし + は使わずに 1+ と 1- を使って。
なお、2 つの引数は正の整数と仮定してよい。
答えをみたら「なあんだ」と思えるが、その当時は自力でこの問題を解くことができなかった。 再帰に対する考え方を教えてくれた関数のひとつとして、その影響は大きい。
(defun add (x y) (if (zerop x) y (add (1- x) (1+ y)))) ; Emacs の *scratch* バッファでの実行結果 (add 1 2) ; 3 (add 100 2) ; 102