@daisuke_m あーすまん。a->bはaをとってbを返す、という関数。ScalaだとA => B みたいな表記だったかな
2010-11-06 17:18:50そうか。関数がサブタイプかどうかってことを考えるのだな。ことJavaだと関数単体を抽象的に取り扱うことがないが、シンプルに考えるなら関数単位で考えるよな
2010-11-06 17:19:32ここでいう型ってのはなんだろうか。数学的には集合とかだったりするのかしら。群論に近いニュアンス?ある関数にある集合をいれた時、できあがる写像の集合があって、さいしょに関数に投入した集合が部分集合のとき写像がどうなるかみたいな話で理解すればいいのだろうか
2010-11-06 17:22:03「関数a->bのa->bを(複合)型とすると、u:>a, v<:bとなるような u->vは、a->bのサブタイプなのよ。」なるほど。今まで「型」は「型」としてしかみなかったけど、「型->型」も「型」の一種なわけだ。なるほどなるほど。
2010-11-06 17:22:43@daisuke_m そそ。関数が第一級になると、データに型があるように関数にも型が必要になる。関数にもサブタイピングを入れるときに、どういう性質なら妥当か、と考えると、さっきのとおり要素型をco-だったりcontra-だったりさせると矛盾がないよね、というお話でした。
2010-11-06 17:25:22ある型のインスタンスを集合としてとらえることはできるけど、インスタンスを集めて集合を作ったらそこから型が生まれるかというと生まれないんじゃないか。ゲンミツに議論するとどうなるんだろうな
2010-11-06 17:28:28@ashigeru 「第一級」のイメージは分かるんだけど、理解した、と自身を持てるほどじゃない。 「ファーストクラスオブジェクト」とか言うよね。 http://tinyurl.com/5z4ayz
2010-11-06 17:28:35こっち見りゃいいのか。 http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0
2010-11-06 17:31:11@daisuke_m まあ、とりあえずは「それ単体を変数に保存できるかどうか」で判断するくらいでいいかと>ファーストクラス。Javaはそれができない。
2010-11-06 17:31:27問題はモチベーションなんだよね。プログラミングの道具として使おうというわけではなくて、型システムやオブジェクト指向の理解を深めるために学ぼうという間接的なものだからあんまりプログラミングしようという気が起きず。そして、触らないからよく理解出来ないという
2010-11-06 17:34:52ん、変化しないと invariant かな? nonvariantじゃなくて。 http://tinyurl.com/24pt898
2010-11-06 17:37:12@daisuke_m 前の話題だけど、invariantは型のほうの話題じゃなくて、オブジェクトがどのように変化したとしても、それだけは変わらない、というオブジェクトの性質ね。やっぱり2つ以上の性質の関連を言っている。オブジェクト自体が変わらない、という性質はimmutable
2010-11-06 17:37:25subtype / covariant / contravariant - soutaroにっき http://htn.to/tZpFWf
2010-11-06 17:37:41@daisuke_m non-variantは、どちらかというと「変わってはならない」というco-やcontra-と対比して制限を表すニュアンスかねぇ。invariantはもともと「不変式」の意味で使われてるから、ちょっと違うかな。
2010-11-06 17:39:32@ashigeru invariantは不変条件。それは覚えてる。こいつはcovariantとかcontravariantとかとは、ほぼ別次元の人ってことか。
2010-11-06 17:40:53@daisuke_m そだね>同じ世界の人。「変わっていい方向性」としてco-, contra-, non- な感じなのかね。
2010-11-06 17:42:14(co-, contra-, non-) (in-, precondition, postcondition) これが、世界の棲み分け。
2010-11-06 17:44:26@daisuke_m Javaのメソッド引数はnon-variantだったよね。contra-variantの性質を持つものって何かあったかね
2010-11-06 17:46:40