tw.log

https://twitter.com/kinaba のログ (twilog の方が便利です。)

<<newer (latest) older>>

20100224 23:15 http://twitter.com/Cryolite/status/9531389696 さて、パターンマッチの良さのわからん人を効果的に罵倒する文言を…てのは冗談で、どうアピールするのが良いのかな。ええとまず、もろにツリー構造を扱うときに必須なのは明らかと信じるのですが。
20100224 23:15 ツリー使う時に無いと困るのは…いや、だって、これ http://shuns.sblo.jp/article/28490553.html を見た後に下のコードを書く気になりますか。部分特殊化 http://twitter.com/cpp_akira/status/9531458549 なしで全部メタ関数とSFINAEやstatic ifで書くと考えたら発狂しませんか、と。
20100224 23:15 てつがく的には、2つの側面があるかなーと思う。まず「ある内部構造を持っているかの検査と、持ってる場合にその構造へのアクセス手段を同時に提供する」。意味するところは二つ。検査とアクセスが1つになるので短い。検査してからでないとアクセスできないので"決して"不正アクセスできない安全さ
20100224 23:16 Boost.Optionalはif(opt)とチェックせずにfoo(*opt)とアクセスして死亡するコードが"書けてしまう"。switch(opt){case Maybe(x):foo(x);}と使えれば、それが絶対ない。"間違えることができないI/F"は僕が一番好きな物なのです
20100224 23:16 Optionalに限らず色々好きなデータをタグ付きで格納できるようにするのがいわゆるvariantなんだけど、C++やDのvariantは、せいぜい"typed union"であって、"tagged union"になってないのでパターンマッチの恩恵をフルに受けづらいかなーとは思う
20100224 23:16 要はvariant<int,int>とかできなくて困るという話なんですが http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/spirit/qi/quick_reference/compound_attribute_rules.html a|b のsemantic value が、aとbの型が同じだと潰れるとか何の役に立つのかさっぱりわからないのですよ…って、脱線してしまった。
20100224 23:16 てつがく的にもう1つの側面は、「値の構築とそこからのデータの取り出しに全然違う見た目の構文を使うのって美しくないなあ」。p=pair(12,34);って作ったペアからp.first、p.secondで値を取るってなんだか。pair(x,y)=p; って綺麗でいいじゃない!
20100224 23:17 昔からMLやHaskellにある古典的なパターンマッチは、ペアからは本当にfstとsndしか取り出せなくて隠蔽・カプセル化がない世界なんですけど、ScalaやF#や最近のHaskellは、色々アクセスメソッドを増やせるのと同様色々パターンをカスタマイズできてモダンで良いですよ。
20100224 23:17 Common Lisp の setf とかは、全然別物なんですけど、魂はだいたい同じだと思う。いや、なんか上手いこと説明すると全然別物ではなくて統一的な扱いができるかもしれないですけど。まあいいや。
20100224 23:18 うわー分割して貼り付けてみたら予想外に長かった。長文厨乙。たぶん最初の2つのtweet以外は蛇足のような気がします
20100224 23:41 関係するようなしないような、あんまりしない気がしてきたけど、そういえばシーケント計算派と自然演繹派の戦争とかがあれば見てみたいのだ

<<newer (latest) older>>

presented by k.inaba (kiki .a.t. kmonos.net) under CC0