[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00287] 「計算機プログラムの構造と解釈第2版」読書会第3 回議事録
―――――――――――――――――――――――――――――――――――
インパク「人類博物館−500万年進化の旅−」 =>=> http://www.jinrui.net
―――――――――――――――――――――――――――――――――――
「インターネット博覧会(インパク)」の埼玉パビリオンがオープン!
今話題の【AIBO】や【エアボード】が当たる!今すぐアクセス!
------------------------------------------------------------------------
えんどうです。
阿部さんから第3回読書会の議事録をいただいたので代理投稿します。
================
「計算機プログラムの構造と解釈 第2版」 読書会 第3回 議事録
日時:2000/09/01 (土) 13:00から17:00まで
場所:横浜市立野毛地区センター(ちぇるる3F)工芸室
参加者:金山さん 横山さん 高橋さん 伊部さん えんどうさん
寺元さん 阿部(書記) yamashitaさん 小室さん
読み手: えんどうさん
当日のスケジュール:
自己紹介を兼ねた歓談(夏休みの話等)
前半
休憩
後半
宴会
全般的にえんどうさんが読んで、yamashitaさんが解説をするという形で進行
しました。尚、本記録中にあるプログラムは、yamashitaさんが板書した際に
省略した部分を一部補った上で実際の処理系(SCM)で動作確認してあります。
1.3 高階関数
1.31 引数としての手続き
問題1.30 (総和関数sum の反復版)
yamashitaさんによる解答例
(define (sum term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (+ result (term a)))))
(iter a 0))
問題1.32
yamashitaさんによる解答例
a.(再帰版)
(define (accum comb nv term a next b)
(define (rec a b)
(if (> a b)
nv
(comb a
(rec (next a) b))))
(rec a b)
)
;; accnumを使ったsumの定義
(define (sum term a next b)
(accum + 0 term a next b))
;; accnumを使ったproductの定義
(define (product term a next b)
(accum * 1 term a next b))
b.(反復版)
(define (accum comb nv term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a)
(comb result (term a)))))
(iter a nv))
問題 1.33
yamashitaさんによる解答例
(define (fac con filter nv ...)
(if (> a b)
nv
(if (filter n)
)
1.32 lambdaを使う手続きの構築
局所変数を作り出すletの使い方
えんどうさん>P.36のletの一般形の定義は、誤植でかっこが一組足りない。
正しくは
(let ((<var1> <exp1>)
(<var2> <exp2>)
…
(<varn> <expn>))
<body>)
<PRE>=1B$B!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=
=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D=
=1B(B<BR>= A=1B$B%$%s%Q%/!V?MN`GnJ*4[!]=1B(B500=1B$BK|G/?J2=3D$NN9!]!W=1B(B=
=20=3D>=3D>=20http://www.jinrui.net=20<BR>= A=1B$B!=3D!=3D!=3D!=3D!=3D!=3D!=
=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D=
!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D!=3D=1B(B<BR>= A=1B$B!V%$%s%?!<%M%C%HGn=
Mw2q!J%$%s%Q%/!K!W$N:k6L%Q%S%j%*%s$,%*!<%W%s!*=1B(B<BR>= A=1B$B:#OCBj$N!Z=
=1B(BAIBO=1B$B![$d!Z%(%"%\!<%I![$,Ev$?$k!*:#$9$0%"%/%;%9!*=1B(B<BR>= A-----=
-------------------------------------------------------------------<BR>= A<=
BR>= A</PRE>
区間二分法による方程式の零点の探索
えんどうさん>二分法は区間によって集束しない場合がある。
抽象と第一級手続き
問題1.41
yamashitaさんによる説明
与式を実際に、置換法(substitution model)で展開してみるとincが16回
(2^2^2回)呼び出されていることがわかる。
;; incの定義
(define inc (lambda (n) (+ n 1)))
=>#<unspecified>
;; doubleを定義する
(define double (lambda (f)
(lambda (x)
(f (f x)))))
=>#<unspecified>
;; テスト
((double inc) 5)
=>7
;; 問題
(((double (double double)) inc) 5)
=>21
(((double (double double)) inc) 5)
=
(((double (double double))
(lambda (x) (+ x 1))) 5)
=
(((double
((lambda (f) (lambda (x) (f (f x))))
(lambda (f) (lambda (x) (f (f x))))))
(lambda (n) (+ n 1))) 5)
=
(((double
(lambda (x)
((lambda (f) (lambda (x) (f (f x))))
((lambda (f) (lambda (x) (f (f x)))) x))))
(lambda (n) (+ n 1))) 5)
=
(以下略)
最後にyamashitaさんから、次回で扱うリスト処理の概略的な説明(ボックス
記法によるリストの表現、cons等)がありました。
次回(第4回)は第2章 「データによる抽象の構築」から。
以上
---
阿部 智彦(byj02057@xxxxxxxxx)