Scheme のお勉強

なぜか Scheme のお勉強。末尾再起(まつびさいき)を意識して、コラッツ予想を。


コラッツの予想とは、「与えられた正の整数 n に対して、

  • n が偶数なら 2 で割る
  • n が奇数なら 3 倍して 1 足す

という処理を繰り返すと、最後には全部 1 になるんじゃね?」という予想。(ほんとに全部の正整数でそうなるのかどうか、まだ誰も証明してないらしい。)

(define (collatz n)
    (display n)
    (newline)
    (cond ((= 1 n))
          ((= 0 (modulo n 2)) (collatz (/ n 2)))
          (else (collatz (+ 1 (* 3 n))))))
(collatz 13)
13
40
20
10
5
16
8
4
2
1


処理系は、FreeBSD 上で、Gauche というやつを使ってみた。


Gauche? ごーしゅ? 仏語では"左"って意味だけど、処理系の名前が何故に「ひだり」?

Karetta|Gaucheの設計思想や誕生の背景
http://karetta.jp/article/book/008237/014327


その他のリソース。

Practical Scheme
http://practical-scheme.net/index-j.html
Gauche - A Scheme Interpreter
http://practical-scheme.net/gauche/index.html
Gauche ユーザリファレンス: Top
http://practical-scheme.net/gauche/man/gauche-refj.html
もうひとつの Scheme 入門
http://www.shido.info/lisp/idx_scm.html


コラッツ問題って?

コラッツの問題 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E3%81%AE%E5%95%8F%E9%A1%8C

おお。(= 0 (modulo n 2)) ってやるより、(zero? (modulo n 2)) のほうがかっこいいな。cons は、まだ使ったことが無いので、これを参考に勉強してみます。

Problem 14 - コラッツ問題 - ボクノス
http://d.hatena.ne.jp/tanakaBox/20080404/1207251186