SICP

SICP 多項式の問題。

相変わらず仕事が辛くて家に帰ってきても勉強をする余力がなくって絶賛ストレス溜まりまくり。 もうFest-swingの使い方ある程度わかったからお腹いっぱいだよ。。さて、完璧にご無沙汰状態のSICPですが、久々に問題2.92を見直したらすっかりワケわかんなくな…

SICP 問題2.92(複数変数の多項式)

問題 変数に順序をつけることで、多項式パッケージを拡張し、異なる変数の多項式に対しても多項式の可算と乗算ができるようにせよ。(易しくはない) 解答 この問題どう考えるんだろう。。一番簡単に考えると、指定した変数で正規化した多項式を生成すること…

年内に2章終わるかな〜。。

先々週は仕事に追われててグッタリ。 そして先週は一週間、出張で東北に行ってて、毎日グッタリ。ノートPCは持っていってたんだけど、ホテルに帰ってきて勉強できたのは2日間ぐらいだかったかなぁ。あんまり身の入った勉強時間はとれなかったけど、問題2.90…

SICP 問題2.91(多項式の除算)

問題 一元多項式はもう一つのもので割り、多項式の商と多項式の剰余が得られる。例えば 除算は長い除算で実行される。つまり被除数の最高次の項を除数の最高次の項で割る。この結果が商の第一項である。次にこの結果に除数を掛け、それを被除数から引き、答…

SICP 問題2.90(濃い多項式と薄い多項式をマージ)

や、やっと終わった。。。結局、複素数の表現の違いを参考にしようとしたらどこでバグが入り込んだみたいで動かず。 どこで表現の違いを吸収してるか思い出せないので、参考にするのは諦めた。 今回の「薄い多項式」と「濃い多項式」は、標準の表現を「薄い…

濃い多項式の問題について(その3)

なんとか濃い多項式の表現と薄い多項式の表現をマージできるとこまでできた。 んが、整数→有理数→実数→複素数のような自動的な型変換は実装してない。 現状、濃い多項式同士、薄い多項式同士での演算までしか実装できていない感じ。 あと少しだ。。

濃い多項式の問題について(その2)

仕事とプライベートが忙しくてちょっと更新できなかった。 時間ができたので改めて問題2.89を解いて、過去のエントリに修正を追記したぜ〜。う〜ん、アホみたいに時間食っちゃったなぁ〜。 でも、いきなりパッケージ形式で書き始めると開発効率が悪いつーこ…

濃い多項式の問題について

ずーっとやってたんだが、うまく設計できない・・・多分今までやろうとしてたのは独自路線だったからかも。ちょっとメモしておくと、データの構成はこんな感じで考えてた。 薄い多項式(polynomial 変数 light (次元 係数) (次元 係数) ...) 濃い多項式(polyn…

算術演算処理システムの演習を見直した。。

もう3章行きた〜いとか言ってたけど、ここまでやってきてやっと、今やってる算術演算処理システムの概念のすごさ、SICPの構成の巧みさ、掲載している問題の導き方の巧さを認識できてきた気がする。 微分のセクションはそこそこおもしろかったんだけど、数値…

SICP 問題2.89(濃い多項式)

問題 上の濃い多項式に適しているという項リストの表現を実装する手続きを定義せよ。 解答 濃い多項式だって。参考書にも記載されていたけど、次のような多項式 ならば、濃い多項式としての表現はこんな感じになるかなぁ。 (polynomial x 1 2 0 3 -2 -5) 一…

SICP 問題2.88(多項式の減算処理)

問題 多項式システムを、減算ができるよう拡張せよ。(ヒント:汎用符号反転演算を定義するのが有用と思うであろう。) 解答 やっぱり減算も定義するんじゃ〜ん。てことは除算も定義すんのかな。面倒くさそうだな。 calculate-system.scm index手続きでうま…

SICP 問題2.87(多項式の再帰を含めた=zero?手続きを実装)

問題 汎用算術演算パッケージに多項式用の=zero?を設定せよ。これはadjoin-termが、その係数自体がまた多項式である多項式に対しても働くことを可能にする。 解答 多項式のリストは、(([次数] [係数]) ([次数] [係数]) ...) という形をしているので、各要素…

SICP §2.5.3 記号代数

最後の10問の前にこんな重めのセクションが・・・もう3章行きてぇ〜。つーわけで、今までの汎用演算システムに、代数的な要素も入れちゃおうという話。 このセクションでは多項式(polynomial)を演算対象に含めることを目的とするらしい。パッケージとして…

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

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

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

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を使って型タグをつけて「データオブジェクト」として保持していた。 今度は、与えられたデータを「手続きオブジ…

SICP 問題 2.74(実際に存在しそうなシステムでデータ主導プログラミング)

問題 アキナイ有限責任会社(Insatiable Enterprises, Inc)は全世界に存在する多数の独立事業所を持つ超分散型の多国籍企業である。この会社の計算機システムは、全体のネットワークがどの利用者にも一つの計算機と見えるような、賢いネットワークインター…

SICP 問題 2.73(記号微分のデータ主導化)

問題 2.3.2節で記号微分を行うプログラムを述べた。 (define (deriv exp var) (cond ((number? exp) 0) ((variable? exp ) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp)…