kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

2009-09-01から1ヶ月間の記事一覧

scala.NotNull

第2回Scala言語仕様輪読会@scala-beにそなえて、Scala Language SpecificationのChapter 3を読んでいて気づいたのだが、scala.NotNullのサブタイプの型はnullを代入できない型になるのね。Scala知って結構経つが知らなかった。 scala> class A defined class…

JavaでContinuationモナド

.@kmizu のScalaのサンプルコードが、まるでPerlのコードのようにイミフだ... http://d.hatena.ne.jp/kmizushima/20090925/1253890980 *P3 http://twitter.com/t_yano/statuses/4370238778 よーし。じゃあ、Javaなら大丈夫ですよね?*1というわけでJavaで書…

Scalaで値を返せるbreak

Scalaでbreakの応用で、ブロックからbreakするときに値を返せるようなものも実現できる。基本的な発想は同じだが、例外のコンストラクタパラメタとして、返すべき値を持たせるところと、ブロックが任意の型を取れるようにパラメタライズされていることが異な…

Scalaでbreak

なんかタイムラインで @yamashiro むしろなかったら作れそうな雰囲気ですよ! 知人のScalaエヴァンジェリスト @kmizu に「何でbreakないの?」と聞いたら「邪道だから」といなされた上で「こうやれば実装できる」と言われましたよw http://twitter.com/_tad_/s…

ScalaでContinuationモナド

Scalaのfor-comprehensionについて、これは単なる拡張for文みたいに機能が限定されたものではなく、モナドを使ったプログラムを簡潔に書ける汎用の構文だよーみたいな説明がよくなされる/したことがある。だが、じゃあ、実際にScalaでforで使えるモナドっぽ…

ScalaでContinuationモナド(改良版)

ScalaでContinuationモナドは、どうにもあまり美しくなかったので、もっとScalaらしく改良してみた。重要な点は、二引数の型コンストラクタCont[R, A]をContinuations[R]の内部クラスContinuation[A]として表現し、flatMap,mapなどはContinuation[A]のメソッ…

第42回情報科学若手の会発表「型レベルプログラミングとScala」

第42回情報科学若手の会のセッション1で「型レベルプログラミングとScala」というタイトルで発表しました。基本的に、型レベルプログラミングの会で発表したスライドをベースに多少修正(型レベル高階関数などの記述を追加)を加えた程度なので、型レベルプロ…

第2回Scala言語仕様輪読会@scala-be

前回と同じく、Scala言語仕様について、淡々と私(id:kmizushima)が読んで行き、それに対して他の参加者がツッコミを入れるという趣旨の会です。今回は、Chapter3 Typesを主に読む予定です。前回よりも内容的にはやや難しくなると思いますが、その分面白いと…

何故implicit defが2回呼ばれるのか

(snip) というわけで、 implicit def後も存在しないメソッドを呼び出すようなケースでは、定義済みのimplicit defは試されない (これは当たり前というか実行効率上好都合ですね) 存在しないメソッドを呼ぶ際には、必要な変換に該当するimplicit defただ1つ…