関数型言語の勉強にSICPを読もう - (29) 3章 - 標準部品化力、オブジェクトおよび状態 (134-137ページ)

時間がなかったので短いです。良くないな。

問題3.7

略。

問題3.8

うまい方法が浮かばなかった。
掛け算を使えばいけるんだけどこれで良いのかな?

(define (make-f)
  (let ((state 1))
    (lambda (in)
      (set! state (* state in))
    state)))

(define f (make-f))

(display (f 1))
(display "\n")
(display (f 0))
(display "\n")


そういえば右から左に評価する方法が分からなかったのでOSS WEB|SICP|ex-3.8を見たら force という関数を使っていた。

Function: force promise
[R5RS] もし、promiseがプロミスでなければ、それをそのまま返します。
そうではない場合で、もしpromiseの値がまだ計算されていない場合には、 forceはpromiseが内包している式を評価し、その結果を返します。 いったん、promiseの値が計算されると、その値はメモ化され、あとで 再びforceされても、再計算がおこなわれることはありません。

なるほど。覚えておこう。


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404