読者です 読者をやめる 読者になる 読者になる

yy_taroのとりとめのない落書き

メインフレームの導入・設計・構築ができるぐらいの知識があったりする。

SICP始めました 56

SICP五十六日目

 

3.1.1局所状態変数を読んだ。

今まで非破壊的変数を使っていたところを破壊的変数を使うようになった。

さすがにまだ序盤だけあってついていけてる。

 

昨日の夜がんばろうと思ったもののそんなに進んでいないのは気にしない。

 

問題3.1

( define ( make-accumulator x )
 ( lambda ( acc )
  ( set! x ( + x acc ) )
  x ) )

 

問題3.2

 以外に難しかった。

( define ( make-monitored f )
 ( let ( ( count 0 ) )
  ( define ( mf m )
   ( cond ( ( eq? m 'how-many-calls? ) count )
      ( ( eq? m 'reset-count )
       ( set! count 0 ) count ) 
      ( else
       ( begin ( set! count ( + count 1 ) )

           ( f m ) ) ) ) )
 mf ) ) 

 

問題3.3、問題3.4

 最終形は以下のとおり。

( define ( make-account balance password cops )
 ( define ( withdraw amount )
  ( if ( >= balance amount )
   ( begin ( set! balance ( - balance amount ) ) balance )
   "Insufficient funds" ) )
 ( define ( deposit amount )
  ( set! balance ( + balance amount ) )
  balance )
 ( define ( call-the-cops amount )
  "call-the-cops" )
 ( define ( dispatch p m )
  ( if ( >= cops 7 )
   call-the-cops
   ( if ( eq? p password )
    ( let ( ( cops 0 ) )
     ( cond
      ( ( eq? m 'withdraw ) withdraw )
      ( ( eq? m 'deposit ) deposit )
      ( else ( error "Unknown repuest -- MAKE-ACCUNT" m )  ) ) )
       ( begin
        ( set! cops ( + cops 1 ) )
        ( error "Incorrect Password" p )  ) ) ) )
 dispatch )

 

計算機プログラムの構造と解釈[第2版]

計算機プログラムの構造と解釈[第2版]