[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00355] 「計算機プログラムの構造と解釈第二版」を読む会第9 回議事録



┏━━━━┓┃宿┃泊┃施┃設┃の┃皆┃様┃へ┃朗┃報┃!!┃■楽天市場の■
┃楽 ● 天┃┗━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛━┛■ノウハウが■
┃トラベル┃★インターネット宿泊予約を成功へと導きます!!  ■てんこもり■
┗━━━━┛★初心者でも簡単にはじめられ、管理できる。だから続けられる★
オンライン宿泊予約市場  →  http://www.rakuten.co.jp/travel/panf.html
------------------------------------------------------------------------


えんどうです。

「計算機プログラムの構造と解釈第二版」を読む会 第9回議事録


2001年3月24日 13:00〜17:00

          +---+
 鈴木さん |   | 坂さん
 えんどう |   | 横山さん
 金山さん |   | 山下さん
          +---+

書記: えんどう
朗読: 鈴木さん

p.82 頑健な設計のための言語レベル

成層設計(stratified design)はプログラムを頑健(robust)にするのに役立つ。

問題 2.52

高林さん作の図形言語を使えば試せるが、
高林さんによる実装は問題 2.48 の考えとは違っているので注意が必要。

2.3 記号データ

2.3.1 クォート

言語を構成している記号そのものを操作することを可能にする。
Lispは何でも評価するが、操作した結果を評価することも可能。

クォートは関数ではなくスペシャルフォーム(特殊形式)。

等しいものは等しいもので置き換えて良いという考え(参照透明性)を破壊するので
クォートが導入されたとたんにその言語は関数型言語ではなくなる。

問題 2.53

問題 2.54

eq? は Javaの == と同じ? (Javaでは参照の比較=同じものを指しているか)
eqal? は値の比較 (Javaのequals()と同じ?)

(eq? '(this is a list) '(this is a list))  ==> false

(eq? 'a 'a) ==> true

アトムのときはtrue、リストのときはfalseとなる。

(define (equal? a b)
	(eq? a b)
	#t
	(let ((pa (pair? a))
	     (pb (pair? b)))
	     (cond ((and pa pb) (and (equal? ((car a)(car b))
				     (equal? (cdr a)(cdr b)))))
                   ((and (not pa)(not pb))(= a b))
		   (else #f ))))

問題 2.55

(car ''abrakadabra)

↓

(car '(quote abrakadabra))

quote

2.3.2 例:記号微分

問題 2.56

問題 2.57

(+ a b c)

↓

(+ a (+ b c))

と変形するように書けば実現できる。

問題 2.58

a. 中置記法への書き換え --> 1項めと2項めを入れ換える

b. 演算子の優先順位を知っておくこと、
   結合が右結合か左結合かわかること

2.3.3 集合の表現

順序づけられないリストとしての集合

問題 2.59

(define (union-set s1 s2)
	(cond ((null? s1) s2)
	      ((element-set? (car s1) set2)
			     (union-set (cdr s1) s2))
		(else (cons (car s1) (union-set (cdr set1) set2)))))

問題 2.60

adjoin-set, union-set で element-of-set? を使わないで済む

順序づけられたリストとしての集合

問題 2.61

(define (adjoin-set x set)
  (cond ((< x (car set)) (cons x set))
	((= x (car set)) set)
	(else (cons (car set) (adjoint-set x (cdr set))))))

問題 2.62

(define (union-set s1 s2)
  (cond ((null? s1) s2)
	((null? s2) s1)
	(else (let (e1 (car s1))
		   (e2 (car s2)))
              (cond ((< e1 e2) (cons e1 (union-set (cdr s1) s2)))
		    ((= e1 e2) (cons e1 (union-set (cdr s1)(cdr s2)))
		    (else (cons e2 (union-set s1 (cdr s2)))))))))


二進木としての集合

p.367

Cormen, Thomas, Charles Leiserson, and Ronald Rivest. 1990. Introduction to Algorithms.
Cambridge, MA: MIT Press.
(浅野哲夫・岩野和生・梅尾博司・和田幸一 訳, アルゴリズムイントロダクション, 近代科学社 1995)

問題 2.63

tree->list2 の方が遅く増加する。

tree->list1 では

(7 (3 (1 '() '()) (5 '() '()))
   (9 '() (11 '() '())))

(append (t2l (3 (1 '() '()) (5 '() '()))
	(cons  7 (t2l (9 '() (11 '() '())))))
	
tree->list1 では樹状再帰が起こる

 -------------------------------------------

tree->list2 では

蓄積変数 result-list を空にしてからため込んで行く

c2l left (c2l ...)

次回は 問題 2.63 の復習から。

次回会場確保=>MLにて。


-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.ss.iij4u.or.jp/~eyasuyuk/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)

------------------------------------------------------------------------
  インフォシーク★オススメお花見スポット&全国各地の桜開花情報!
 http://www.infoseek.co.jp/Playspot?pg=playspot_top.html&svx=971122