SICP

関数型言語の勉強にSICPを読もう - (32) 3章 - 小休止 beginを利用した print デバッグについて

以前、traceを利用したデバッグ方法を紹介しました。 今日は begin を利用した print デバッグの方法を紹介します。SICPを1ページ目から順に読んでいくと begin がなかなか出てこないのですが、今日 begin を知りこのデバッグ方法に気づきました。例えば (de…

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

問題3.17 3日くらいずっと考えていた。 (define (count-pairs x) (let ((already? '())) (define (count-pairs-internal y) (let ((add-count 0)) (if (not (pair? y)) 0 (begin (if (not (memq y already?)) (begin (set! add-count 1) (set! already? (con…

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

新しい単語やよく聞くけど意味をきちんと理解できていない単語などが出てくる。(frames, bindings, unbound, enclosing environment, shadow) 問題3.9 再帰版は factorialの環境が横並びにできる。 反復版は factorialが1個、その横に fact-iterが横並び。 …

関数型言語の勉強に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)) …

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

3章はいよいよ代入とかオブジェクトとかが登場します。 参照透明性という概念や、代入という概念の導入で何が変わるかとかそのあたりが書いてあるようです。 代入と局所状態 問題3.1 この程度ならスラスラ書けるようになった。 (define (make-accumulator st…

関数型言語の勉強にSICPを読もう - (27) 2章 - データによる抽象の構築 (109-110ページ)

問題2.75 データが手続きでも、もう驚かなくなってきた。 これはSICP読む前にはなかった感覚だ。 (define (make-from-ma-g-ang mag angle) (define (dispatch op) (cond ((eq? op 'real-part) (* mag (cos a))) ((eq? op 'imag-part) (* mag (sin a))) ((eq?…

関数型言語の勉強にSICPを読もう - (26) 2章 - データによる抽象の構築 (108ページ)

今日はとても長いです。 その分かなり濃い時間が過ごせたので有意義でした。 良い練習問題でした。 問題2.74 なんとフルスクラッチでコードを書かせる問題。 今までの理解度とかSchemeのコーディング力が問われる。 問題2.74 a fileはリストとして表現する。…

SICPリングを作りました 参加者募集

あの結城さんがSICPを勉強されているようです。(http://sicp.g.hatena.ne.jp/hyuki/) そんなこんなでSICPの情報をまとめ読みしたいのでSICPリング(http://sicp.ring.hatena.ne.jp/)を作りました。 はてなダイアリーを使っていてSICPを読んでいる人は、カテゴ…

関数型言語の勉強にSICPを読もう - (25) 2章 - データによる抽象の構築 (107ページ)

楽しい楽しい練習問題。 問題2.73 a expのtype tagを取り出しそれに対応したderivを表から取り出しexpに作用させている。 number?variable?の部分に適用できないのはtype tagがないから。 問題2.73 b deriv本体 type tagを利用して手続きを得る。 number?var…

関数型言語の勉強にSICPを読もう - (24) 2章 - データによる抽象の構築 (98-107ページ)

問題2.68 (define (encode message tree) (if (null? message) '() (append (encode-symbol (car message) tree) (encode (cdr message) tree)))) (define (encode-symbol char tree) (define (list-have? l e) (cond ((null? l) #f) ((equal? (car l) e) #t…

for-eachでtraceって

定義した手続きに対して一つ一つ (trace a) (trace b) (trace c)と書くのが面倒になってきました。なので以下のように書いてみたのですが (define (a hoge) hoge) (define (b hoge) hoge) (use slib) (require 'trace) (for-each trace (list a b)) gosh> **…

関数型言語の勉強にSICPを読もう - (23) 2章 - データによる抽象の構築 - 2.3.4 (94-98ページ)

2.3.4 Huffman符号化木の話 Huffman符号、なんとも分かりやすい説明で感動。これからは会話の随所に「Huffman符号がさ。」と散りばめよう。(嘘 SICPの該当箇所を伴侶の人に見せて読んでもらったら理解できたらしい。 IT系が苦手なのに恐るべし。 Huffman木を…

関数型言語の勉強にSICPを読もう - (22) 2章 - データによる抽象の構築 - 2.3.2 (90-94ページ)

問題2.60 ;; element-of-set?は変更の必要がない。 ;; 重複が許される分リストが大きくなるので多少効率が下がる。 (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (else (element-of-set? x set)))) ;; ただ足すだけ。…

関数型言語の勉強にSICPを読もう - (21) 2章 - データによる抽象の構築 - 2.3.2 (89-90ページ)

順序づけられないリストとしての集合 (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (else (element-of-set? x (cdr set))))) (define (adjoin-set x set) (if (element-of-set? x set) set (cons x set)))ちなみに in…

関数型言語の勉強にSICPを読もう - (20) 2章 - データによる抽象の構築 - 2.3.2 (85-88ページ)

2.3.2 記号微分 これはなかなか面白い。サボらずに全部やってみよう。最終目標は例えば (deriv '(* x y) 'x)の結果がyになること。 クォートされることから分かる通りx, yはSchemeの変数ではない。 SICPにある通り derivは variable? same-varibale? sum? ad…

関数型言語の勉強にSICPを読もう - (19) 2章 - データによる抽象の構築 - 2.3.1 (83-85ページ)

2.3.1クォート 今まではデータは数値だけでしたが、クォートが登場しました。 問題2.53 (list 'a 'b 'c) gosh> (a b c) (list (list 'george)) gosh> ((george)) (cdr '((x1 x2) (y1 y2))) gosh> ((y1 y2)) (cadr '((x1 x2) (y1 y2))) gosh> (y1 y2) (pair? …

関数型言語の勉強にSICPを読もう - (18) 2章 - データによる抽象の構築 - 2.2.4 図形言語 解説とソース

図形言語で学ぶべき部分は何でしょうか? この言語では組み合わされたオブジェクトはリスト構造ではなく、手続きとして表現されている おそらくここが一番大事なのではないかと考えます。 ただ実際にコードを書いて動かしてみないと理解するのは正直厳しいで…

関数型言語の勉強にSICPを読もう - (17) 2章 - データによる抽象の構築 - 2.2.4 図形言語 モナー

夜な夜なコードを書いてやっと絵が出ましたよ。 うれしくてうれしくてしょうがないのでとりあえず説明なしでアップしておきます。 説明・コードは明日で ※「SICPを読もう」の目次はこちら 計算機プログラムの構造と解釈posted with amazlet on 06.04.15 Gera…

関数型言語の勉強にSICPを読もう - (16) 2章 - データによる抽象の構築 - 2.2.4 図形言語(73-82ページ)

早くSchemeで絵を出したいので、 frame, painterの概念を学ぶところから進めようと思います。 幸い Gauche-glで線を引く部分は理解できているので、本文中の wave painterは実装できるとふんでいます。 フレーム座標写像について 文章を読んでもさっぱり分か…

関数型言語の勉強にSICPを読もう - (15) 2章 - 小休止 Gaucheで画面に絵を出そう(Gauche-gl)

計算機プログラムの構造と解釈を読んでScheme勉強していますといっても、いったい何の役に立つの?と思っている人が多いと思います。 僕も実際、考え方はかなり勉強になっていますがまだ仕事やMonaに結びつけることが出来ていません。 こういう状態が長く続く…

これで全部

全部出しました。これでもう隠し持っているものは何もないです。

関数型言語の勉強にSICPを読もう - (14) 2章 - データによる抽象の構築(70-73ページ)

2.2.3公認インターフェースとしての並びのつづき 問題2.37 一旦パス。 余裕があったらここに戻ろう。 mapの使い方の勉強になりそうな気がする。 問題2.38 上から順に 3/2 1/6 (1 (2 (3)))→間違い(1 (2 (3 ()))) (3 (2 (1)))→間違い(((() 1) 2) 3) 満たすべき…

関数型言語の勉強にSICPを読もう - (13) 2章 - データによる抽象の構築(65-69ページ)

2.2.3公認インターフェースとしての並び 「accumulate」の意味が分からないので辞書を引いた。 ━━ v. 積む, ためる; 積もる, たまる; 【コンピュータ】累算する. まずはaccumulateの動作を確認しよう。 (define (accumulate op initial sequence) (if (null?…

関数型言語の勉強にSICPを読もう - (12) 2章 - データによる抽象の構築(63ページ)

問題 2.28 (define (fringe tree) (define (pair-to-list pair) (list (car pair) (car (cdr pair)))) (if (null? tree) '() (if (pair? (car tree)) (append (pair-to-list (car tree)) (fringe (cdr tree))) (append (car tree) (fringe (cdr tree))))))と…

関数型言語の勉強にSICPを読もう - (11) 2章 - データによる抽象の構築(62-63ページ)

問題 2.24 (list 1 (list 2 (list 3 4))) gosh> (1 (2 (3 4)))問題なし。 問題 2.25 (car (cdr (car (cdr (cdr (list 1 3 (list 5 7) 9)))))) (car (car (list (list 7)))) (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (list 1 (list 2 (l…

連絡事項

過去に書いていた記事をゆっくりとアップするといろいろ弊害があるのでこれから全部アップします。

関数型言語の勉強にSICPを読もう - (10) 2章 - データによる抽象の構築(59ページ)

問題2.20 この問題をぱっと見で解こうとしたらあっという間に、はまってしまったので簡単な要素に分けてみました まずは数値のリストを受け取って、その中に含まれる偶数だけを返す関数を作ってみるのはどうでしょうか。 (define (collect-even list) (if (n…

ひとり言

今公開している(9)とかは、1週間前くらいに書いていた記事なので皆様から頂いたアドバイスが反映されていないとかいろいろありますがもうすぐ、ねたが尽きるのでリアルタイムになると思います。 SICPを学生時代に読めればよかったとか考えたんですが、もとも…

関数型言語の勉強にSICPを読もう - (9) 2章 - データによる抽象の構築(45-58ページ)

48ページ 以前にも一度 car、cdrを勉強したのですが、それが「なぜ必要か?」「その背景には何があるのか?」が分かりませんでした。 その答えの導入部は48ページに書いてあります。 ここを読んだだけではだめで、手続きの抽象化についてしっかり読んだ後に読…

関数型言語の勉強にSICPを読もう - (8) 1章 - 手続きによる抽象の構築(31-44ページ)

1.3 高階手続き やっとここまでたどり着いた。 概念は理解しているし、たまに使うけど何か発見があるのではないだろうか。 問題1.31 (define (product term a next b) (if (> a b) 1 (* (term a) (product term (next a) next b)))) (define (factorial n) (…