タグ

ブックマーク / kmizu.hatenablog.com (8)

  • Scalaに関する誤解と事実を語る - kmizuの日記

    TL;DR 世間のScalaに関するイメージは、昔のままであることが多い 昔のままどころか、最初から間違ったイメージを持たれていることも多い 実際には、既に解決されている問題は多々あるし、改善に向かっていることも多い プロジェクト管理の問題を言語に押し付けているケースもある はじめに 自分が最初にScalaに触れたのが2005年(Scala 1からカウントした場合)、あるいは2007年(Scala 2以降からカウントした場合)と、Scalaとの付き合いも結構長くなってきましたが、その間に Typesafe社(現Lightbend社)の設立 実質標準ビルドツールとしてのsbtの確立 ライブラリのバイナリ後方互換性に関するポリシーの策定 公式ScalaイベントScala Daysのはじまり Play 2 Frameworkの登場 Scala Center発足 その他色々 がありました。この間、

    Scalaに関する誤解と事実を語る - kmizuの日記
  • Scalaで作るPackrat Parserコンビネータ - kmizuの日記

    【急募】PEGパーサのメモ化の実装 http://twitter.com/anatoo/status/1253132392 とかあったんで、せっかくなのでサクっと実装してみた。 ポイントは、PEGパーサコンビネータでは、ParserがString => Option[(A, String)]を継承していたのを、Int => Option[(A, Int)]を継承するようにしたことと、Parserの外側のクラスに入力文字列を表すメンバinputを追加したこと。Stringを引数に取る形でも良いのだけど、そうすると、テーブルのルックアップコストが高くなってしまうので、メモ化する意味がほとんど無くなってしまう。 trait PackratParser[+A] { val input: String abstract class Parser[+A] extends (Int => Option[

    Scalaで作るPackrat Parserコンビネータ - kmizuの日記
  • Scalaで作るPEGパーザコンビネータ - kmizuの日記

    といっても、昨日Javaで作ったPEGパーザコンビネータライブラリをScalaで書き直しただけのものだけど。Java版に比べて、1/3くらいの行数になっている。 object PEGParserCombinator { abstract class Parser[+A] extends (String => Option[(A, String)]) { def /[B >: A](that: => Parser[B]): Parser[B] = parserOf((in) => { this(in) orElse that(in) }) def ~[B](that: => Parser[B]): Parser[(A, B)] = parserOf((in) => { for((r1, rest1) <- this(in); (r2, rest2) <- that(rest1)) yield

    Scalaで作るPEGパーザコンビネータ - kmizuの日記
  • PEG基礎文法最速マスター - kmizuの日記

    Scala基礎文法最速マスターを書こうか迷っていたら、既にyuroyoroさんに書かれてしまったので、ちょっと違う方向で。BNFを既に知っている人は、これを読めばPEGの基礎をマスターしてPEGを書くことができるようになるでしょう(ほんとか?)。 基 Parsing Expression Grammar(PEG)はBNFに似ているけど、ちょっと(かなり?)違う文法の表記法です。BNFはその文法がどのような言語を表現しているかを定めるのに対して、PEGは入力がどのように解析されるかを定めます。PEGとBNFの一番大きな違いは、PEGには曖昧さが無いことです。たとえば、プログラミング言語のif文を表現する次の擬似BNFには曖昧さがあります。 statement ::= if_statement | ...; if_statement ::= IF LPAREN expr RPAREN sta

    PEG基礎文法最速マスター - kmizuの日記
  • 人材獲得作戦・4 試験問題 を解いてみた - kmizuの日記

    なんか、人材獲得作戦・4 試験問題ほかの問題を解くのが一部で流行っているらしいので、Scalaで解いてみた。途中、くだらない所ではまって時間を浪費しまって、1時間超過してしまったのは恥ずかしい限りだ(正確には計測してないが、たぶん1時間20〜30分くらい)。もっと精進したい。普通のBFS+αで解いてみた。 import scala.io.Source import java.io._ import scala.collection.mutable.Queue val maze = Source.fromFile(new File("input.txt")).getLines().toList.toArray.map(_.toCharArray) val (h, w) = (maze.length, maze(0).length) var (x, y) = (for(x <- 0 until

    人材獲得作戦・4 試験問題 を解いてみた - kmizuの日記
  • ScalaでStateモナド - kmizuの日記

    Scalaでは普通に副作用が使えるので、Stateモナドみたいなのの出番はまず無いんだけど、最近Haskellの各種モナドをScalaで書き直すのがマイブーム(死語)なのでやってみた。今回も、All About MonadsのState monadの解説ページの実装丸写しで大した工夫も無いけど、まあそれはそれで。しかし、こういう事毎回やるたびに思うんだけど、やはり型推論がHaskellに比べて弱いのは痛いなあと。無駄な型注釈が必要になる場面がたびたびあるし。 class State[S, A](x: S => (A, S)) { val runState = x def flatMap[B](f: A => State[S, B]): State[S, B] = { new State(s => { val (v, s_) = x(s); f(v).runState(s_) }) } de

    ScalaでStateモナド - kmizuの日記
  • kmizuの日記

    皆様、お久しぶりです。去る2月10日(土)、2月11日(日)に筑波大学情報科学類にて特別講義の講師をやってきました。といっても、私が全日担当したわけではなくOB一人が一コマを自分の得意分野について講義をするオムニバス形式のものです。 私はといえば去年やったのと同様、JavaScriptで抽象構文木を「手で」組み立てて解釈・実行するプログラミング言語Minisとその処理系を作るという講義を行いました。講義当日はスライドにミスがあることに途中で気づいたり色々あってテンパりましたがそれはそれとして。 元々、私が担当した「プログラミング言語作成概論」の趣旨は プログラミング言語を作るというのはとても簡単な作業なのに、プログラマにすらあまり知られていないのはけしからん。 とはいえ、実際に作ってみせないと実感が湧かないのが人情。 抽象構文木をJavaScript上で組み立てて、それをevalする関数を

    kmizuの日記
  • 第15回未来会議(5/30) - kmizuの日記

    昨年の後半に第14回を開催してから、長らく中断していましたが、今月末に第15回未来会議を開催します。 日時:05月30日(土) 13:00〜 場所:筑波大学 3C213 情報学類生控室(第三エリアC棟2階) 発表者: id:ranha君 id:TELL君 他 プログラム:未定(決定次第追記します) 懇親会 特に考えてないですが、夕ご飯べながら雑談とかそういうのはあるかもしれません。 未来会議は、金曜日の夜にやるのが通例でしたが、今年度から、私のゼミ日程が金曜日の夜になってしまったので、土曜日に日程を変更することになりました。 未来会議について簡単に説明しておくと、主に筑波大学の学生(現在、情報学類誌WORDの関係者と情報学類の人がほとんどですが)が一人20〜30分くらいの時間で好きなテーマ(技術的な話が多いですが、そうでないものもOKです)について発表し、それに対して聴講者がツッコミを行

    第15回未来会議(5/30) - kmizuの日記
    InoHiro
    InoHiro 2009/05/22
    未来会議!!!
  • 1