2013-12-19(木) | -- (permalink)

代入の効用について説明するだけにしては、Ex 3.5. はちょっとやり過ぎな気もするが、なかなか興味深い内容ではある。

Monte Carlo integration is a method of estimating definite integrals by means of Monte Carlo simulation. Consider computing the area of a region of space described by a predicate P(x, y) that is true for points (x, y) in the region and false ...


2013-12-08(日) | -- (permalink)

後半はGeneric Procedure関する解説。

オブジェクト指向の言語で開発を行っていると、「そもそも型とは」というようなことを考える機会がほとんどない。言語のプリミティブな機能を利用して、型の仕組みを実装してみるのはなかなか貴重な経験だ。

ここでは、Generic Procedureを実現するための戦略が3つ紹介される。

message-passingは非常にオブジェクト指向的だ。直交座標系で複素数を表現する ...


2013-12-01(日) | -- (permalink)

環境構築に手間をかけたくない質なので、最初はDrRacketを利用してSchemeのコードを書いていた。

Gaucheでメタプログラミング

しかし、上記のサイトなどから、Emacsでも「別ウインドウで評価しながら、ソースを書けること」が分った。
その結果、結局Emacs+Gaucheの環境に落ち着いた。

しばらくはこれで満足していたし、新しい言語であれば、全て手で打つことも、理解を早めるという点では無駄ではないだろう。

しかし、SICPの分量・難易度を考えると、あまりゆっくりコーディングしている暇はない。さすがに、最低限の自動補完が欲しくなった。

ところが、「scheme emacs 補完」とかで検索すると、結構面倒臭そうな方法が多い。

結局、emacsのパッケージ管理システムを使ってauto-completeをインストールする方法が一番楽そうだ、という結論に達した。

その方法を備忘録も兼ねて記載しておく。ちなみにEmacsのバージョンは24.2だ。

まず、パッケージ管理システムを利用したことのない人はリポジトリを設定しよう。

;;;;;;;;;;;;;;;;;;;;Package;;;;;;;;;;;;;;;;;;;;
(require 'package)
(add-to-list 'package-archives
     '("marmalade" . "http://marmalade-repo.org/packages/")
     '("melpa ...

2013-10-27(日) | -- (permalink)

(前編はこちら)

1章から学べたことを列挙する。

・Schemeに慣れた。

if、cond、define、let、lambdaなどを用いてプログラミングできるようになった。例の「カッコ」にもだいぶ慣れてきた。

・linear recursionとiterationの違いが分かるようになった。

今以上に不慣れな時のコードではあるが、以下のようにrecursionとiterationで再帰が書けるようになった。後者のほうが遥かに効率が良い。

;recursion
(define (f n)
  (cond ((< n 3) n)
        (else (+ (f (- n 1))
                 (* 2 (f (- n 2)))
                 (* 3 (f (- n 3)))))))

;iteration
(define (f-iter product product-1 product-2 counter max-count)
  (cond ((> counter ...

2013-10-27(日) | -- (permalink)

先日の投稿「代替不可能なプログラマとは。」にある通り、SICPを読み始め、先日第1章「Building Abstractions with Procedures」を読み終えた。実際には先日の投稿より少し前から読み始めていて、1章読み終えるのに3週間ほどかかったことになる。(さらに言うと、3ヶ月ほど前に、ビデオ講義を3時間分ほど鑑賞した。この時は、テキストが存在することを知らなかったのと、当たり前だが偉大なるハル・アベルソン氏とジェラルド・ジェイ・サスマン氏の早口の英語が聞き取れるはずもなく、あえなく挫折した。)

学習環境は以下。

・テキストは原著で。

テキストは原著がオンラインで閲覧できるので、原著で読むことにした。日本語訳に対する酷評を聞き過ぎたせいで、理解できなかった場合に翻訳のせいにしてしまいそうだからだ。それと、語学能力の訓練にもなればと思っている。英語だけをやっている時間がないので、英語とプログラミングを一緒に効率良く学びたい。

・開発環境にはDrRacketを使用。

コマンドラインとかEmacsとかも試してみたが、結局一番楽そうなものに落ち着いた。

SICPを読んだ結果できるようになること、得られる知識というのははっきりしていなくて、ただただ今よりプログラミングを深く理解できるに違いないという予感だけがモチベーションになっている。SICPに関して「Why Structure and Interpretation of Computer Programs matters」という記事を見つけた ...