たらいのテストtak

竹内郁雄先生のたらい回し関数というと、こういうのです。

[crayon lang=”scheme” title=”takm.scm”]
(defun tak (x y z) ; 日本語コメントのテスト
(if (<= x y) ; 引数を3つ取り、自分自身を再帰的に z ; 呼び出すのがtakと呼ばれる (tak (tak (1- x) y z) ; この関数です。 (tak (1- y) z x) ; 何度も何度も再帰的に (tak (1- z) x y)))) ; たらい回ししますが必ず終了します [/crayon] ところが、これはマッカーシーが間違えて覚えて広めてしまったものだそうで、竹内郁雄先生のオリジナルは [crayon lang="scheme" title="tak.scm"] (defun tak (x y z) ; 日本語コメントのテスト (if (<= x y) ; 引数を3つ取り、自分自身を再帰的に y ; 呼び出すのがtakと呼ばれる (tak (tak (1- x) y z) ; この関数です。 (tak (1- y) z x) ; 何度も何度も再帰的に (tak (1- z) x y)))) ; たらい回ししますが必ず終了します [/crayon] こちらだそうです。 最初のifが真のときに返す値が違います。


Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください