クラスの二つの顔
- 出版社/メーカー: 任天堂
- 発売日: 2008/04/10
- メディア: Video Game
- 購入: 26人 クリック: 440回
- この商品を含むブログ (389件) を見る
マリオカートWii が楽しすぎて日記どころじゃない生活になってますがたまにはエントリをw
wifi対戦のできがよすぎです。神ゲーです。いい年して指が痛くなるまで遊んでますw 世界トップの走りを見ることができるのもまたいい!超おすすめ。ハンドルは初心者用に見えて実は難しい罠に注意(^^;
本題。
クラスには2種類あります。値を表すクラスと、ライブラリ的なクラス。
「値を表すクラス」という言葉は「Equals() と演算子 == のオーバーロードに関するガイドライン」で知った言葉です。同値関係や順序関係を持つクラスは値を表すクラスでしか意味がないでしょう。
もう一方はWebClientみたいなライブラリのようなクラス。値も持ってたりしますが、値を表すというよりはライブラリの設定値を保持してるといったところです。
名著と云われる オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング) を見てみると、これらを「型としてのクラス」と「モジュールとしてのクラス」と分類してました。オブジェクト指向のクラスという仕組みがこれらを併合したと。総称性は「型のパターン」である、ともあります。んー、これはマリオカート脳にもビキビキと刺激が来る言葉です。同値関係や順序関係は C# ではジェネリクスで表現されてますね。これが型のパターンであると。ふむ!閑話休題。
一つに併合してしまったので、値を表しつつもそれを操作するライブラリも含めて一つのクラスにできたり、ライブラリ的であっても値も持っていたり(リエントラントじゃない形でならCのライブラリでもできてたことだけど)と、両方の便利なところをクラスで表現できるってことでしょうかね。
冒頭では2種類とすっぱりわけてしまったけど、その中間になだらかにハイブリッドなクラスもありっぽいですね。GUIのコントロール部品なんかは中間タイプと言えそうですし。このあたりはもうちょっと読み進めてみます。
ずーっともやもやしてた疑問を考えたり調べたりしているうちに、型とクラスの違いが一つわかった感じです。
PageDefrag
ブクマしただけじゃもったいない気がしたのでこちらにメモ。
http://www.microsoft.com/technet/technetmag/issues/2007/09/UtilitySpotlight/default.aspx?loc=jp/
ページファイルやレジストリハイブ等々、ロックされてて普通じゃデフラグできないファイルをデフラグする Sysinternals のツール(の日本語での説明)。これはイイ!
Y はまわる
今回の Y ブームの発端が id:taguo さんで、さらにそのきっかけとなった一部が自分のエントリだったようです。今回のブームでλ計算をちょこっと勉強してみたので、これぞまさに再帰ですね!
飽きたと言っておきながらプチ数学ブームは、人物史として形を変えて続いていたり。
Y あたりの話は、数理論理学や数学基礎論に属するようです。集合論の矛盾にはじまり、ヒルベルト(ヒルベルト・プログラム)、ゲーデル(不完全性定理)、ノイマン(あまり関係ないけど)、アロンゾ・チャーチ(ラムダ計算)、チューリング(ラムダ計算)、クリーネ(正規表現の発明者)、ハスケルといった天才たちが関わっています。それぞれ wikipedia で調べるとおもしろいです。ゲーデルの人生に涙したり、ノイマンがコンピュータより計算が速いのかよ!とか。
プログラム言語 Haskell の名前の由来となっているハスケルカリーさんが研究していたのが組合せ論理(combinatory logic)というもので、チャーチのラムダ計算ととても似ているものです。コンビネーターってのはここから来た名前みたいですね。数学パズル ものまね鳥をまねる―愉快なパズルと結合子論理の夢の鳥物語 って本が気になります。近所の図書館にあるようなので、今度読んでみるかも。
というキーワードだけのたいした内容のないエントリーでトラバして、リンクも再帰させておきますw
λ計算で 1+2
すっかり飽きる前にλ計算してみます。お題は 1+2 が 3 になるかどうか。
チャーチ数と足し算の定義はwikipediaのものを使います。
1 := λf x. f x 2 := λf x. f (f x) 3 := λf x. f (f (f x)) PLUS := λm n f x. m f (n f x)
PLUS 1 2 をβ変換(引数に変数を入れて計算すること)していった結果(正規形)が 3 になりますかどうか。
1 と 2 はα変換(変数名が重ならないように付け替えること)して、
1 := λg y. g y 2 := λh z. h (h z)
とします。式の意味は変わってません。
では、開始。
( λm n f x. m f (n f x) ) ( λg y. g y ) ( λh z. h (h z) ) → ( λn f x. ( λg y. g y ) f (n f x) ) ( λh z. h (h z) ) → ( λf x. ( λg y. g y ) f (( λh z. h (h z) ) f x) ) → λf x. ( λy. f y ) (( λh z. h (h z) ) f x) → λf x. f (( λh z. h (h z) ) f x) → λf x. f (( λz. f (f z) ) x) → λf x. f ( f (f x) )
3 になった! 1+2 ができただけなのに、とてもうれしいw
ついでに、間違いないよね?とドキドキしてます(^^;
1+2 ごときでw