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

  • カリー化 != 部分適用 - kmizuの日記

    最近、ネット上でカリー化に関する記事を読んでいると、特にGroovy界隈でカリー化に関して誤解がまかり通っているようなので(特に実用的なGroovy: カレー化クロージャーによるファンクショナル・プログラミングはひどい。そもそも、Groovyの標準ライブラリ自体がカリー化を行うための関数ではないものにcurryとか付けてるから仕方無いのかもしれんが)、一言言っておく。 カリー化というのは、Groovyで言うと、 def add = {x, y -> x + y} のように、xとyという複数の引数を取って値を返す関数を def add = {x -> {y -> x + y}} //間違ってパースできないコードになっていたので修正(12/17) のように、一つの引数xをとって、「yを引数にとって値を返す関数」を値として返すような関数に変換すること、あるいは最初からそのように表現することを言う

    カリー化 != 部分適用 - kmizuの日記
    rrreeeyyy
    rrreeeyyy 2015/03/09
  • 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の日記
    rrreeeyyy
    rrreeeyyy 2014/11/12
  • 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の日記
    rrreeeyyy
    rrreeeyyy 2014/11/12
  • 初学者向けの Scala Tips (2) - nullからOptionへの変換 - kmizuの日記

    Scalaでnullを使っていいのは小学生までだよねー、というのは冗談ですが、Scala文化圏ではnullを使わないのが原則です(いくつか例外はありますが)。代わりに出てくるのがOption型です。しかし、Scalaでは困ったことにnullを返すJavaのメソッドを呼び出さなければいけない場面がたくさんあります。 たとえば、以下のようなコードを書かなければいけない場面にはしばしば遭遇します。 val javaMap: java.util.Map[String, String] = javaObject.getMapping() val value: String = javaMap.get(key) // 型注釈はあえて付けている if(value != null) { ... } else { ... } さて、ここで困るのが、javaMap.get(key)はkeyに対応する値が入って

    初学者向けの Scala Tips (2) - nullからOptionへの変換 - kmizuの日記
    rrreeeyyy
    rrreeeyyy 2014/05/09
  • 1