【Scheme】SchemeでもCollatz http://ameblo.jp/valvallow/entry-10179274699.html
これがこないだの。
(define (collatz n) (display n) (newline) (if (> n 1) (if (even? n) (collatz (/ n 2)) (collatz (+ (* n 3) 1))))) (collatz 5) ;; => 5 ;; => 16 ;; => 8 ;; => 4 ;; => 2 => 1 (collatz 30) ;; => 30 ;; => 15 ;; => 46 ;; => 23 ;; => 70 ;; => 35 ;; => 106 ;; => 53 ;; => 160 ;; => 80 ;; => 40 ;; => 20 ;; => 10 ;; => 5 ;; => 16 ;; => 8 ;; => 4 ;; => 2 ;; => 1これが今日書いたの。 こないだより悪くなってるような気がするな。
;;collatz (define collatz (lambda (seed f) (f seed) (cond ((<= seed 1)) ((even? seed) (collatz (/ seed 2) f)) ((odd? seed) (collatz (+ 1 (* seed 3)) f))))) (collatz 5 (lambda (s)(display s)(newline))) ;;=> 5 ;;=> 16 ;;=> 8 ;;=> 4 ;;=> 2 ;;=> 1 ;;=> #t
Y-Combinatorで。
【Scheme】Y-Combinator(Yコンビネータ/不動点演算子) http://ameblo.jp/valvallow/entry-10182574504.html
;;collatz with y-combinator ;;Y is y-combinator (define Y (lambda (f) ((lambda (h)(h h)) (lambda (p) (f (lambda (n)((p p) n))))))) ;;collatz (define collatz (lambda (f) (lambda (seed) (display seed) (newline) (cond ((<= seed 1)) ((even? seed) (f (/ seed 2))) ((odd? seed) (f (+ 1 (* seed 3)))))))) ((Y collatz) 5) ;;=> 5 ;;=> 16 ;;=> 8 ;;=> 4 ;;=> 2 ;;=> 1 ;;=> #tY-Combinator、複数パラメータに対応したの書いてみたい。 ここが参考になりそう。
ボクノス:Yコンビネータを読み解こう http://d.hatena.ne.jp/tanakaBox/20080203/1202023473
0 件のコメント:
コメントを投稿