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