たらいまわし関数

買ってからずっと読んでいなかった本なんですが、読んでみたらスゲーおもろい。

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

案外トリッキーな技が多い。

気になったのが、コレ。

たらいまわし関数」

再帰的に定義された次のような関数。特に意味はない。

「特に意味はない」ってなんだよ!!

気になって仕方がないので、Schemeにしてみた。

(define (tarai a b c)
  (if (<= a b)
      b
      (tarai
        (tarai (- a 1) b c)
        (tarai (- b 1) c a)
        (tarai (- c 1) a b))))

ぐるぐる。ぐるぐる。

僕の頭も、ぐるぐる。ぐるぐる。

追記2

竹内関数の作者、竹内先生は「Lispの神様」と呼ばれる人らしい。

ホントに凄い人。