2011-06-04
計算機プログラムの構造と解釈(SICP) 勉強メモ5
2週間ほど急がしくて勉強が出来なかった。
今日から再開。
とりあえず、前回勉強した分をUPしてなかったのでUP.
問題1.6だけ。
問題1.7で悩んでる。
;問題1.6 (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) ;(define (sqrt-iter guess x) ; (new-if (good-enough? guess x) ; guess ; (sqrt-iter (improve guess x) ; x))) ;上のsqrt-iterを実行したら、無限ループに陥った。 ;ifとは ; (if <predicate> <consequent> <alternative>) ;である。 ;if式の評価はまず式の述語<predicate>部分を評価する。 ;<predicate>の評価の結果が真なら、解釈系は帰結部<consequent>を"評価しその値を返す"。 ; ;一方、condは ; (cond (<p1> <e1>) ; (<p2> <e2>) ; (<pn> <en>)) ;である。 ;condはまず<p1>を評価し、その値が偽なら<p2>を評価する。 ;その手順が真である述語が見つかったら、解釈駅はその節の対応する<e>の値をこの条件式の値として返す。 ; ;つまり、new-ifではelse-clauseの値が評価されず、else-clauseがそのまま返り値として返ってきている。 ;よって無限ループとなる。 ; ;ifを使ったsqrt-iter ;gosh> (trace sqrt-iter) ;#<closure #f> ;gosh> (sqrt 9) ;0:(sqrt-iter 1.0 9) ;1: (sqrt-iter 5.0 9) ;2: (sqrt-iter 3.4 9) ;3: (sqrt-iter 3.023529411764706 9) ;4: (sqrt-iter 3.00009155413138 9) ; ->3.00009155413138 ; ->3.00009155413138 ; ->3.00009155413138 ; ->3.00009155413138 ; ->3.00009155413138 ;trace: sqrt-iter has been called 5 times. ;3.00009155413138 ; ;new-ifを使ったsqrt-iter ;(sqrt-iter (improve guess x) x) ; At line 448 of "/users/nishizawaiori/Study/book/lisp/sicp/sicp.scm ;この無限ループ ; ;これにより、(improve guess x)が評価されず、平均値が変わらずずっとgood-enough?で#fが返り、無限ループに陥ることが解る。 ;
トラックバック - http://d.hatena.ne.jp/Iori_Nishizawa/20110604/1307173305
リンク元
- 3 http://practical-scheme.net/wiliki/rssmix.cgi
- 3 http://search.goo.ne.jp/web.jsp?MT=乱筆乱文お許しください&from=goo_dict_body&PT=dict&JP=0&CK=1
- 2 http://search.yahoo.co.jp/search?p=乱筆乱文&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=0&oq=乱筆乱
- 2 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=require_relative
- 2 http://www.google.com/reader/igoogle-module?up_displayStreamId=user/07207573480185828061/label/Keywords&up_itemCount=5&up_ranking=d&up_readItemsVisible=0&up_linkTarget=new&lang=en&country=us&.lang=en&.country=us&synd=ig&mid=106&ifpctok=-228314107976
- 1 http://d.hatena.ne.jp/keyword/LISP
- 1 http://docomo.ne.jp/cp/as-rslt.cgi?pno=1&key=乱筆乱文&sid=00
- 1 http://docomo.ne.jp/cp/as-rslt.cgi?pno=2&key=乱筆&fid=6
- 1 http://mixi.jp/view_diary.pl?url=http://d.hatena.ne.jp/Iori_Nishizawa/20110604/1307173305&owner_id=1280473
- 1 http://search.yahoo.co.jp/search?p=xの平方根を戻り値とする文+プログラム&aq=-1&oq=&ei=UTF-8&x=wrt
