@uents blog

Code wins arguments.

プログラミングとは何なのかの感想

はてブで興味深い記事を見つけたのでその感想。ブコメも含めておもしろい。 プログラミングとは何なのか - hitode909の日記 10年プログラマをやってきたけど、最近の僕の中ではプログラミング技術とは、 モデリング力とその処理系の実装スキル、だと思ってい…

SICP 読書ノート#28 - 3.2 評価の環境モデル (pp.138-147)

前回からずいぶん間が空いてしまった。 今回は「§3.2 評価の環境モデル」から。 初出じゃないけど用語がいろいろと出てくる。 環境(environments) フレーム(frames) 束縛(bindings) 大域(global) 外側の環境(enclosing environment) 変数の値(value of a var…

SICP 読書ノート#27 - 3.1 代入と局所状態 (pp.127-137)

いよいよ3章。キーワードは、 モジュール化 オブジェクトによるプログラムの組織化 代入(assignment)と局所状態(local state) 環境モデル(enviroment model) ストリーム(streams)と遅延評価(delayed evaluation) あたりのようです。 代入と局所状態 これまで…

SICP 読書ノート#26 - 第2章 まとめ

最後は端折ってしまいましたが、長い長い2章がようやく終わったので、 自分なりにまとめたいと思います。(1章でもまとめておけばよかったorz) *** ところで、この章で学ぶべきものは何でしょうか? それは「§2.1.3 データとは何か」の以下の一節を理解す…

SICP 読書ノート#25 - 2.5.3 記号代数 (pp.118-125)

すみません、さくっとパスします。おそらくこの章の本質ではないと思うので。 必要ならまた戻ってくると思います。。 ※「SICP読書ノート」の目次はこちら

SICP 読書ノート#24 - 2.5.2 異なる型のデータ統合 (pp.113-118)

「§2.5.2 異なる型のデータ統合」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.5.2.scm 異なる型のデータ統合 前回のエントリで汎用演算システムを構築したが、 異なる型同士の計算はできなかった…

SICP 読書ノート#23 - 2.5.1 汎用算術演算 (pp.110-113)

「§2.5 汎用演算システム」から。 この章は2章でこれまで学んだことの応用問題といった感じ。データ主導を使って汎用演算システムを構築して行きます。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.5.1.…

SICP 読書ノート#22 - 2.4.3 データ主導プログラミングと加法性(3) (pp.109-110)

「§2.4.3 データ主導プログラミングと加法性」の続き。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.3.scm メッセージパッシング §2.1.3 データとは何か で見た、 クロージャの特性を利用したアクセ…

SICP 読書ノート#21 - 2.4.3 データ主導プログラミングと加法性(2) (pp.108-109)

「§2.4.3 データ主導プログラミングと加法性」の続きから。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.2.scm 問題 2.74 アキナイ有限会社 (Insatiable Enterprises, Inc.) のデータベースを統合す…

SICP 読書ノート#20 - 2.4.3 データ主導プログラミングと加法性(1) (pp.105-108)

「§2.4.3 データ主導プログラミングと加法性」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.1.scm 複素数のデータ主導プログラミング 前回のエントリの複素数データを例に、 データ主導プログ…

SICP 読書ノート#19 - 2.4 抽象データの多重表現 (pp.99-105)

「§2.4 抽象データの多重表現」から。 はじめに §2.4の最後の問題2.76で総括するが、抽象データの汎用演算の構築には3つの戦略がある。 明白な振り分けを持つ汎用演算 (strategies—generic operations with explicit dispatch) データ主導流 (data-directed …

SICP 読書ノート#18 - 2.3.4 Huffman符号化木(2) (pp.94-99)

「§2.3.4 Huffman符号化木」について。 テキストの説明がかなりわかりやすく、楽しく読めました。 問題 2.67 テキストのコードを写経し実行してみる。 (define sample-tree (make-code-tree (make-leaf 'A 4) (make-code-tree (make-leaf 'B 2) (make-code-t…

娘の言い間違いがかわいい

最近2才になった娘。 色々言葉を話せるようになったけど、時折出てくる言い間違いがいちいちかわいいのでメモ。 食べる→ぱれる→ぱべる お魚→おかさな とうもろこし→とうもころし お味噌汁→おみしる アイスクリーム→あすむくり、あいくすむり ただいまー→お…

SICP 読書ノート#17 - 2.3.4 Huffman符号化木(1) (pp.94-99)

おおよそ理解できてるつもりだけど、問題 2.69が上手く解けない。 (define (generate-huffman-tree pairs) (successive-merge (make-leaf-set pairs))) (define (successive-merge leafs) (if (null? leafs) nil (successive-merge-1 (cdr leafs) (car leafs…

SICP 読書ノート#16 - 2.3.3 集合の表現 (pp.88-94)

「§2.3.3 集合の表現」から。 順序づけられないリストの集合 写経して動かしてみる。intersection-setは内積(積集合)が求まる。 racket@> (element-of-set? 'a '(a b c d)) #t racket@> (adjoin-set 'z '(a b c d)) '(z a b c d) racket@> (intersection-s…

SICP 読書ノート#15 - 2.3 記号データ (pp.83-88)

「§2.3 記号データ」から。原文はSymbolic Data。 クォート これまではデータは全て値だった。クォートするとそのデータをシンボルとしてみなすことができる。 '(a b c)と(list 'a 'b 'c)と(cons 'a (cons 'b (cons 'b nil)))は等価。 eq?とequal?の違い。Ja…

SICP 読書ノート#14 - 2.2.4 図形言語(4) (pp.73-83)

引き続き「§2.2.4 図形言語」。いよいよ終盤。 ペインタの変換と組み合わせ transform-painterというペインタのフレーム変換を行う手続きを定義する。 (define (transform-painter painter origin corner1 corner2) (lambda (frame) (let ((m (frame-coord-m…

SICP 読書ノート#13 - 2.2.4 図形言語(3) (pp.73-83)

引き続き「§2.2.4 図形言語」。 ベクトル (問題 2.46) ベクトルのコンストラクタ、アクセサ、演算手続きを実装する。 (define (make-vect x y) (cons x y)) (define xcor-vect car) (define ycor-vect cdr) (define (add-vect vec1 vec2) (make-vect (+ (xco…

SICP 読書ノート#12 - 2.2.4 図形言語(2) (pp.73-83)

Racket Graphics Legacy Libraryを使う 前回のplanet/sicp.ssではほとんど実装済みであまり勉強にならないので、Graphics Legacy Libraryがおすすめ。 http://docs.racket-lang.org/graphics/index.html http://stackoverflow.com/questions/13592352/compil…

SICP 読書ノート#11 - 2.2.4 図形言語(1) (pp.73-83)

Racket supports The SICP Picuture Languageを使う 色々試行錯誤したが、図形言語を単に試すだけならこれがいちばん簡単だった。 http://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html http://d.hatena…

SICP 読書ノート#10 - SICPのためのプログラミング環境構築

「§2.2.4 図形言語」に入る際にグラフィックスまわりのライブラリが必要になってきたので、 遅ればせながらScheme処理系であるRacketやEmacsの環境構築方法をまとめてみました。 (2015/04/29追記) 内容が古くなってきたので全体的に加筆/修正しました (2015/…

SICP 読書ノート#9 - 2.2.3 公認インターフェースとしての並び - 写像の入れ子 (pp.71-73)

「§2.2.3 公認インターフェースの並び」の「写像の入れ子」から。 写像の入れ子 まずは写経。 enumerate-intervalから復習。 (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) racket@> (enum…

SICP 読書ノート#8 - 2.2.3 公認インターフェースとしての並び (pp.65-70)

「§2.2.3 公認インターフェースの並び」から。 公認インターフェース(conventional interfaces)というのがよくわからないけど、信号処理のフィルタのように手続きを組み合わせてプログラムを構成することを考える模様。 並びの演算 filterやaccumulateの実…

Windows 7/Vistaの起動時のHDDアクセスを軽減する

久々にWindows VistaのPCを起動したら起動直後のHDDランプ点滅が酷かったので、ちょっとググって試したことメモ。 ※(2014/7/8追記) Windows 7もほぼ同じようなのでタイトルを変更しました。 HDDアクセスを調べるには パフォーマンスモニターを使うと実際にど…

SICP 読書ノート#7 - 2.2 階層データ構造と閉包性 (pp.55-65)

「§2.2 階層データ構造と閉包性」から。 閉包性とはclosure propertyというそうだが、このclosureはJavaScripter等で おなじみの「クロージャ」ではなく、部品(モジュール同士)が密結合することなく 部品のプロパティがその中に閉じており独立性が保たれてい…

SICP 読書ノート#6 - 2.1.4 区間算術演算 (pp.52-54)

「§2.1.4 拡張問題:区間算術演算」から。 なんというか、この章はひたすら数学。。。 問題 2.7 (define (make-interval a b) (cons a b)) (define (upper-bound i) (max (car i) (cdr i))) (define (lower-bound i) (min (car i) (cdr i))) 問題 2.8 減算手…

SICP 読書ノート#5 - 2.1 データ抽象入門 (pp.45-52)

「§2.1 データ抽象入門」から データ抽象とは かんたんに言うと、データ構造を階層化して抽象化しましょうってことかな? 公認インターフェース(conventional interface)とかデータ主導プログラミング(data-directed programming)とか聞き慣れない用語が。後…

SICP 読書ノート#4 - 1.3 高階手続きによる抽象 (pp.31-44)

§1.3 「高階手続きによる抽象」から 高階手続きとは 引数に手続きをとり戻値で手続きを返す手続き。これをつかうことで言語の表現力が大幅に広がる。 全部解くパワーはなかったので、数学っぽいものはパスして、高階手続きに関する問題だけをチョイスした。 …

SICP 読書ノート#3 - 1.2 手続きとその生成するプロセス(pp.5-30)

作用的順序と正規的順序 正規的順序 (normal-order evaluation) : 値が必要になるため被演算子を評価しない 作用的順序 (applicative-order evalutation) : 関数の引数に演算子と被演算子を含む場合、先に評価する 問題 1.5 Scheme解釈系が正規的順序が作用…

SICP 読書ノート#2 - 1.1 名前と環境 (pp.1-4)

名前と環境 変数に名前をつける手段(関数とは書いていない)として define がある。原文を引用。 A critical aspect of a programming language is the means it provides for using names to refer to computational objects. We say that the name identi…