最近、Scalaを勉強しようと思い立った。その結果、 Project Eulerを解く 素数の無限列が欲しくなる どうするんだっけ? SICPを読む というルーチンが人生で何回目かに起こったので、ブログに自分の言葉で書いておこう。 ストリームと遅延評価 遅延評価 遅延評価は、以下のようなコードで実現出来る。 (define (memoize func) (define evaled #f) (define val ()) (lambda () (cond (evaled val) (else (set! evaled #t) (set! val (func)) val)))) (define-syntax my-delay (syntax-rules () ((_ exp) (memoize (lambda () exp))))) (define (my-force promise) (p