kinaba さんが Cryolite を洗脳してパターンマッチ厨に仕立て上げるリスト

タイトルまま.
26
Akso de la Malbono @Cryolite

しかし未だにパターンマッチの何が良いのかがまったくピーンと来てないので, kinaba さんあたりが「え? パターンマッチの良さも分からないんですか!? プログラマとして終わっていますね! それ以前に人間としてすでに終わっているのですけれど!」とか問い詰めてくれないかにゃー.

2010-02-24 01:03:58
kinaba @kinaba

http://twitter.com/Cryolite/status/9531389696 さて、パターンマッチの良さのわからん人を効果的に罵倒する文言を…てのは冗談で、どうアピールするのが良いのかな。ええとまず、もろにツリー構造を扱うときに必須なのは明らかと信じるのですが。

2010-02-24 23:15:26
kinaba @kinaba

ツリー使う時に無いと困るのは…いや、だって、これ http://bit.ly/qan16 を見た後に下のコードを書く気になりますか。部分特殊化 http://bit.ly/b9wj7g なしで全部メタ関数とSFINAEやstatic ifで書くと考えたら発狂しませんか、と。

2010-02-24 23:15:33
kinaba @kinaba

てつがく的には、2つの側面があるかなーと思う。まず「ある内部構造を持っているかの検査と、持ってる場合にその構造へのアクセス手段を同時に提供する」。意味するところは二つ。検査とアクセスが1つになるので短い。検査してからでないとアクセスできないので"決して"不正アクセスできない安全さ

2010-02-24 23:15:56
kinaba @kinaba

Boost.Optionalはif(opt)とチェックせずにfoo(*opt)とアクセスして死亡するコードが"書けてしまう"。switch(opt){case Maybe(x):foo(x);}と使えれば、それが絶対ない。"間違えることができないI/F"は僕が一番好きな物なのです

2010-02-24 23:16:03
kinaba @kinaba

Optionalに限らず色々好きなデータをタグ付きで格納できるようにするのがいわゆるvariantなんだけど、C++やDのvariantは、せいぜい"typed union"であって、"tagged union"になってないのでパターンマッチの恩恵をフルに受けづらいかなーとは思う

2010-02-24 23:16:08
kinaba @kinaba

要はvariant<int,int>とかできなくて困るという話なんですが http://bit.ly/a3Wv7B a|b のsemantic value が、aとbの型が同じだと潰れるとか何の役に立つのかさっぱりわからないのですよ…って、脱線してしまった。

2010-02-24 23:16:12
kinaba @kinaba

てつがく的にもう1つの側面は、「値の構築とそこからのデータの取り出しに全然違う見た目の構文を使うのって美しくないなあ」。p=pair(12,34);って作ったペアからp.first、p.secondで値を取るってなんだか。pair(x,y)=p; って綺麗でいいじゃない!

2010-02-24 23:16:56
kinaba @kinaba

昔からMLやHaskellにある古典的なパターンマッチは、ペアからは本当にfstとsndしか取り出せなくて隠蔽・カプセル化がない世界なんですけど、ScalaやF#や最近のHaskellは、色々アクセスメソッドを増やせるのと同様色々パターンをカスタマイズできてモダンで良いですよ。

2010-02-24 23:17:07
kinaba @kinaba

Common Lisp の setf とかは、全然別物なんですけど、魂はだいたい同じだと思う。いや、なんか上手いこと説明すると全然別物ではなくて統一的な扱いができるかもしれないですけど。まあいいや。

2010-02-24 23:17:11
kinaba @kinaba

うわー分割して貼り付けてみたら予想外に長かった。長文厨乙。たぶん最初の2つのtweet以外は蛇足のような気がします

2010-02-24 23:18:39
Akso de la Malbono @Cryolite

パターンマッチ欲しい. (←new!)

2010-02-24 23:27:05