2010-10-01から1ヶ月間の記事一覧

SICP 問題2.86(意味不明っす。)

問題 複素数で実部、虚部、絶対値、及び偏角が通常の数、有理数またはシステムに追加しようと思うかもしれぬ他の数であるものを扱いたいとしよう。これを取り込むのに必要なシステムの変更を記述し、実装せよ。通常の数と有理数に汎用なsineやcosineのような…

ちょっとだけClojureを使ってみようと思う。

大分前から会社の事務処理が面倒で、一部ツールを作ってサクっとやってたんすよ。 VBScriptで。 いやね、俺だってこんなクソ言語使いたかなかったんだけど、 新しい環境をインストールする必要がなく、 いわゆる「一般的な言語っぽい構文」を持ち、 コンパイ…

SICP 問題 2.85(可能であれば型のレベルを下げようね)

も〜んのすげえ疲れた。。まぁでも理解は深まったかなぁ。 「追記(2010/10/30)」の箇所からが正しいコードになる。それより上の記録は削除しちゃおうかと思ったけど、生みの苦しみのログとしてのこしておくことにした。お疲れさん、俺。 問題 本節ではデー…

SICP 問題 2.84(型が混合しているデータ同士の演算)

問題 問題2.83のraise演算を使ってapply-generic手続きを修正し、本節で論じたように順次を決めていく方法で、引数を同じ型になるまで強制変換するようにせよ。二つの型のいずれが塔の中で高いかをテストする方法を考えなければならない。これをシステムの他…

SICP 問題 2.83(一階層上位の型への汎用強制型変換手続きraise)

問題 図2.25に示した型の塔: 整数、有理数、実数、複素数を扱う汎用算術演算システムを設計しているとしよう。(複素数を除く)各型について、その型のオブジェクトを塔の中で一レベル高める手続きを設計せよ。(複素数を除く)各型に働く汎用raise演算はど…

SICP 問題 2.82(可変長引数の手続きに対するapply-genericの一般化)

問題 多くの引数を持つ一般の場合に、強制型変換が使えるよう、apply-genericをどう一般化すればよいか示せ。一つの戦略は全ての引数を第一引数の型、次に第二引数の型等々強制変換を試みることである。この戦略が(そして上の第二引数版が)十分に一般的で…

SICP 問題 2.81(同型の強制型変換は必要か?)

問題 Louis Reasonerは、apply-genericは引数が既に同じ型を持っていても、互いの型へ強制変換を試みるべきだと考えた。そこで彼が考えるには、上に示した強制変換の表に、各型の引数を自分の型へ、「強制変換」させる手続きを置く必要がある。例えば、上に…

尾瀬行ってきた。

2010/10/10〜11に尾瀬に行ってきた。本当は10日に行くつもりだったんだが、前日の天気予報で10日が雨、11日が終日曇りだったもんで、10日を移動の日、11日を登山+帰宅の日にしたら凄くいい天気になってよかったよかった。 うちの奥さんがず〜っと行きたい行…

SICP 問題 2.80(ゼロ確認述語手続きを追加。)

問題 引数が0かどうかテストする汎用述語=zero?を定義し、汎用算術演算パッケージに設定せよ。この演算は通常の数、有理数、及び複素数に対して働くものとする。 解答 これも汎用演算を定義するのと、各パッケージに専用の演算手続きを定義していくだけな感…

SICP 問題 2.79(汎用等価述語equ?を追加。)

問題 二つの値の等価をテストする等価述語equ?を定義し、汎用算術演算パッケージに設定せよ。この演算は通常の数、有理数、及び複素数に対して働くものとする。 解答 「異なる型」の比較については現段階で考慮されていない。(だって問題2.80以降にそれにつ…

SICP 問題 2.78(通常の数値での演算もできるようにする。)

問題 scheme-numberパッケージの内部手続きは、実質的には基本手続きである+、-を呼び出すだけである。 言語の基本手続きを直接呼び出すのは、型タグシステムでは各データオブジェクトに型をつける必要があるので不可能である。しかし実際のところ、Lispの実…

SICP §2.5(汎用演算のシステム その2[異なる型のデータの結合])

さぁ、やっと「異なるデータ型」の取扱いにきたぞと。このセクションでは、このエントリで「わからん」と言っていたことと、見習いschemerさんに教えていただいたことの核心を説明している。 要するに、「異なる型データが混在した場合どのように扱うべきか…

SICP 問題 2.77(complex型の為の選択子が必要っす。)

問題 louis Reasonerは、zを図2.24に示すオブジェクトとして、式(magnitude z)を評価しようとした。 驚いたことに答えの5の代わりに、型(complex)には演算magunitudeは対応する手続きは無いという。apply-genericのエラーメッセージを得た。この対話をAl…

SICP §2.5(汎用演算のシステム その1[汎用算術演算])

写経の量が多くて疲れちまったよ。。 とりあえずまとめたコードだけアップする。ちなみに動くかどうかは調べてない。写経ミスがある可能性大。 ;;;================================================== ;;;汎用手続き ;;;==================================…

SICP 問題2.76(いろんな方法の比較)

問題 汎用演算を使った巨大システムが発展すると、新しいデータオブジェクトの型や、新しい演算が必要になる。三つの戦略─明白な振り分けを持つ汎用演算、データ主導流、メッセージパッシング流─のそれぞれにつき、新しい型や新しい演算を追加する時、システ…

SICP 問題2.75(メッセージパッシングの概念でmake-from-mag-angを実装)

問題 構成子make-from-mag-angをメッセージパッシングの流儀で実装せよ。この手続きは上のmake-from-real-imagに似ているはずだ。 解答 似た感じで作りゃいいわけだ。 (define (make-from-mag-ang r a) (define (dispatch op) (cond ((eq? op 'real-part) (*…

SICP §2.4(データ主導プログラミングと加法性 その4[メッセージパッシング])

SCIPに復帰〜♪ このエントリは「メッセージパッシング」についてのお話。 今までは「make-*」系の手続きは、外部から与えられたデータを、consを使って型タグをつけて「データオブジェクト」として保持していた。 今度は、与えられたデータを「手続きオブジ…