2010-10-01から1ヶ月間の記事一覧
問題 複素数で実部、虚部、絶対値、及び偏角が通常の数、有理数またはシステムに追加しようと思うかもしれぬ他の数であるものを扱いたいとしよう。これを取り込むのに必要なシステムの変更を記述し、実装せよ。通常の数と有理数に汎用なsineやcosineのような…
大分前から会社の事務処理が面倒で、一部ツールを作ってサクっとやってたんすよ。 VBScriptで。 いやね、俺だってこんなクソ言語使いたかなかったんだけど、 新しい環境をインストールする必要がなく、 いわゆる「一般的な言語っぽい構文」を持ち、 コンパイ…
も〜んのすげえ疲れた。。まぁでも理解は深まったかなぁ。 「追記(2010/10/30)」の箇所からが正しいコードになる。それより上の記録は削除しちゃおうかと思ったけど、生みの苦しみのログとしてのこしておくことにした。お疲れさん、俺。 問題 本節ではデー…
問題 問題2.83のraise演算を使ってapply-generic手続きを修正し、本節で論じたように順次を決めていく方法で、引数を同じ型になるまで強制変換するようにせよ。二つの型のいずれが塔の中で高いかをテストする方法を考えなければならない。これをシステムの他…
問題 図2.25に示した型の塔: 整数、有理数、実数、複素数を扱う汎用算術演算システムを設計しているとしよう。(複素数を除く)各型について、その型のオブジェクトを塔の中で一レベル高める手続きを設計せよ。(複素数を除く)各型に働く汎用raise演算はど…
問題 多くの引数を持つ一般の場合に、強制型変換が使えるよう、apply-genericをどう一般化すればよいか示せ。一つの戦略は全ての引数を第一引数の型、次に第二引数の型等々強制変換を試みることである。この戦略が(そして上の第二引数版が)十分に一般的で…
問題 Louis Reasonerは、apply-genericは引数が既に同じ型を持っていても、互いの型へ強制変換を試みるべきだと考えた。そこで彼が考えるには、上に示した強制変換の表に、各型の引数を自分の型へ、「強制変換」させる手続きを置く必要がある。例えば、上に…
2010/10/10〜11に尾瀬に行ってきた。本当は10日に行くつもりだったんだが、前日の天気予報で10日が雨、11日が終日曇りだったもんで、10日を移動の日、11日を登山+帰宅の日にしたら凄くいい天気になってよかったよかった。 うちの奥さんがず〜っと行きたい行…
問題 引数が0かどうかテストする汎用述語=zero?を定義し、汎用算術演算パッケージに設定せよ。この演算は通常の数、有理数、及び複素数に対して働くものとする。 解答 これも汎用演算を定義するのと、各パッケージに専用の演算手続きを定義していくだけな感…
問題 二つの値の等価をテストする等価述語equ?を定義し、汎用算術演算パッケージに設定せよ。この演算は通常の数、有理数、及び複素数に対して働くものとする。 解答 「異なる型」の比較については現段階で考慮されていない。(だって問題2.80以降にそれにつ…
問題 scheme-numberパッケージの内部手続きは、実質的には基本手続きである+、-を呼び出すだけである。 言語の基本手続きを直接呼び出すのは、型タグシステムでは各データオブジェクトに型をつける必要があるので不可能である。しかし実際のところ、Lispの実…
さぁ、やっと「異なるデータ型」の取扱いにきたぞと。このセクションでは、このエントリで「わからん」と言っていたことと、見習いschemerさんに教えていただいたことの核心を説明している。 要するに、「異なる型データが混在した場合どのように扱うべきか…
問題 louis Reasonerは、zを図2.24に示すオブジェクトとして、式(magnitude z)を評価しようとした。 驚いたことに答えの5の代わりに、型(complex)には演算magunitudeは対応する手続きは無いという。apply-genericのエラーメッセージを得た。この対話をAl…
写経の量が多くて疲れちまったよ。。 とりあえずまとめたコードだけアップする。ちなみに動くかどうかは調べてない。写経ミスがある可能性大。 ;;;================================================== ;;;汎用手続き ;;;==================================…
問題 汎用演算を使った巨大システムが発展すると、新しいデータオブジェクトの型や、新しい演算が必要になる。三つの戦略─明白な振り分けを持つ汎用演算、データ主導流、メッセージパッシング流─のそれぞれにつき、新しい型や新しい演算を追加する時、システ…
問題 構成子make-from-mag-angをメッセージパッシングの流儀で実装せよ。この手続きは上のmake-from-real-imagに似ているはずだ。 解答 似た感じで作りゃいいわけだ。 (define (make-from-mag-ang r a) (define (dispatch op) (cond ((eq? op 'real-part) (*…
SCIPに復帰〜♪ このエントリは「メッセージパッシング」についてのお話。 今までは「make-*」系の手続きは、外部から与えられたデータを、consを使って型タグをつけて「データオブジェクト」として保持していた。 今度は、与えられたデータを「手続きオブジ…