タグ

ブックマーク / uehaj.hatenablog.com (6)

  • Hindley-Milner型推論アルゴリズムをGroovyで書いてみた - uehaj's blog

    こないだ「Haskellのforallについて理解したことを書いておく(ランクN多相限定)」の記事を書いたときにHindley-Milner型推論アルゴリズム*1を調査するにあたって、こちらにある「Scala by Example」の16章にあるScalaでの実装例をGroovyに書きなおしたので晒しておきます。 以下のような型検査・推論ができます。実行はできません。 def listLenTest = LetRec('len', Lam('xs', App(App(App(Var('if'), App(Var('isEmpty'), Var('xs'))), Var('zero')), App(Var('succ'), App(Var('len'), App(Var('tail'), Var('xs')))) )), App(Var('len'), App( App(Var('cons'

    Hindley-Milner型推論アルゴリズムをGroovyで書いてみた - uehaj's blog
  • ヒアドキュメントと複数行文字列について - uehaj's blog

    「ヒアドキュメント」をなんで「ヒアドキュメント」っていうかを調べてみた。以下が参考ページ。 http://programmers.stackexchange.com/questions/143918/why-is-it-called-a-here-document http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%BF%E3%82%A4%E3%83%97%E7%AB%AF%E6%9C%AB#.22Here_is.22_.E3.82.AD.E3.83.BC わかったこと 上記の内容が正しいとして、読み取ったことは以下のとおり。 「ヒアドキュメント」は「"Here is" document」から来ている。 "Here is"は何からきているかというと、昔テレタイプ端末にあった「Here is」というキー。 「Here is」キーは何かと

    ヒアドキュメントと複数行文字列について - uehaj's blog
    sonota88
    sonota88 2014/10/25
  • DCIアーキテクチャについて語ってみるよ - uehaj's blog

    Trygve Reenskaug氏とJames O. Coplien氏らが提唱する「DCIアーキテクチャ」について、id:digitalsoulさんが論文を翻訳してくださり、またその解説とサンプル実装(groovy, scala)を示してくださっており、読んでみたところ、大変興味深いので理解した限りを書いてみます。 おじさん登場 たとえば、あるおじさんがいたとします。 このおじさんは、白いスーツ、グラデーションの入ったサングラスと金ぴかのネックレスをつけて新宿歌舞伎町に出かけ「やくざ」として振るまいます。とおりかかったお兄さんがそのおじさんに出会い、目が合ってしまい、因縁を付けられ、お金を巻き上げられてしまいます。 さて、おじさんは家に帰ります。実は、このおじさんは家では良いお父さんとして振る舞います。赤ちゃんはこのおじさんの目を見て笑いかけます。おじさんは相好を崩し、オーよしよし。 さて

    sonota88
    sonota88 2014/01/09
  • プログラミング言語Frege(フレーゲ)を紹介します - uehaj's blog

    これはマイナー言語 Advent Calendar 2013の21日目の記事です。 Frege(フレーゲ*1 )を紹介します。 Fregeは、Java VM上で動作するHaskell風の言語です。以下のような特徴を持っています。 純関数型言語 非正格評価(いわゆる遅延評価) Hindley-Milner型推論に基づく静的型言語 これらの特徴は、Haskellと共通するものであり、構文も基的なところについてはHaskellとだいたい同じか似ているかもしくはサブセットです。標準関数やデータ型やモジュールについても、Haskell 2010からたくさん引っぱってきているそうです。 しかしながら、Fregeはその目標において、Haskellとの完全な互換性を達成しようとはしていません。実際かなり違っています。特にJava VM上で有用であることに重点が置かれており、プリミティブ型はJavaのもの

    sonota88
    sonota88 2013/12/21
  • IOはいかにして命令書(アクション)であるのか:(たぶん)解決編 - uehaj's blog

    えー、先日「IOはいかにして命令書(アクション)であるのか」という記事を書きましたが、その疑問は「IO inside」を読んだところすべて氷解したのでご報告します*1。 要するに、 type IO a = RealWorld -> (a, RealWorld)です。おしまい*2。 id:nobsunさんやid:kazu-yamamotoさんが指摘していてくれたことは今おそえばおそらくこれでした。IO aは値ではなく関数なわけです。代数型データ構造(Hoge Int)みたいな表記に惑わされてコンテナだと見誤ったのが、誤解の元。 関数型がファーストクラスな言語では任意の計算が任意に遅延評価できるのだから「遅延評価仮説」は成り立たないし、この意味での副作用の除去*3の理由として持ち出す必要はありません。すみません。 純粋だから何なのさ! ではいかなる意味で、副作用除去(というより無いと言い張るた

    IOはいかにして命令書(アクション)であるのか:(たぶん)解決編 - uehaj's blog
  • Groovy on android by discobot - uehaj's blog

    Android上でgroovyを動かすには、discobotというものを使います。これはGroovyに対するパッチ群を中心としたもののようです。 準備 JDK,Android SDKをインストールしておきます。Eclipse plugin(ADT plugin for eclipse)は使わない方向で。 ダウンロード discobotを以下からダウンロード。 http://code.google.com/p/discobot/downloads/detail?name=discobot-0.3.tar.gz&can=2&q= Groovy(1.6.4)のソースを含んでいるので結構でかい。 というフォルダに展開するとします。 /project.confにandroid SDKのフォルダを設定 android-folder:/tool/android-sdk-mac_86 配下のlib/Uti

  • 1