(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

数遊びをしよう(ちょっとaddの理解をしたい)

これまたScheme手習いより。
非負整数の足し算をする関数を作ってみましょうってだけの話です。
それでもって途中add1って出てくるけど、これは受け取った引数に1を足して返すだけ。
sub1は逆で1引いて返してくれます。
これはCommonLispだと標準的な関数なのかな?(1+と1-ってあるの?)

(define @+
  (lambda (n m)
    (cond
     ((zero? m) n)
     (else
      (add1 (@+ n (sub1 m)))))))

こういうの見てると算数ってそうだよなぁーって納得できる。
「1をm回nに足しますよ」って。

非負整数の掛け算も載ってて
それは「0にm回nを足しますよ」てきなプログラムになるんだけども、最初は確かにそうやってならったよなぁって思える。
掛け算は足し算からなっていて、足し算は1ずつ増やした結果なんだなぁと。
ちょっと書きかけだけど再帰って楽しいよね。