タグ

ブックマーク / tanakh.hatenablog.com (9)

  • 2004-12-27

    久しぶりにHaskellを勉強した。 せっかくなのでだらだらと。 はじめに Template Haskell というものを勉強してみた。 そういうわけで、資料を探してみたのだが、 日語の資料は見事なまでに皆無だったので、 (Haskellで、しかも試験的な機能だから止む無しか) 英語の論文を読むことになった。 10ページほど読むのに3日かかったけど…。 Template Haskell とは…? 大雑把に言うとコンパイル時にプログラムを生成するためのもののようである。 概要 コンパイル時に指定した式を実行させ、その値をコードの中に展開させることが出来る。 展開できる式の値は"プログラム式"等の型をもつ。 要するに、任意の方法で構文木を組み立てて、それを実行することが出来ると。 大雑把なアイデア 構文木はExpQという型を持つ。 Template Haskell においてはこのExpQ型の

    2004-12-27
    sirocco
    sirocco 2011/10/03
    「Template Haskell とは…?大雑把に言うとコンパイル時にプログラムを生成するためのもののようである」
  • 2006-08-26

    なんだか四月以降文章を書く気分になかなかなれなくて、 二年ほど前、このブログの開始当初の目標だった ひたすらテクニカルアーティクルを載せるページを作るというのは もうすでにかなり頓挫している風ではありますが、 リハビリのために無理に書くことを見つけてでも なにやら書いてみることにします。 ところで、先月の末から一月ほど京都に帰っていたのですが、 京都は死ぬほど暑かったですね。 盆地で暑いと言われつつも、 やはり離れてはじめて分かるというものです。 (私はあんまり広く情報収集したりしないので、 ここに書く内容はとうによく知られた問題なのかもしれないが、あしからず…) プログラムの実行において、何らかの外部的な情報 (つまりIOを介して得られる情報)を そのプログラム全体から参照したいケースというのがある。 典型的な例がプログラムのコンフィギュレーションで、 たとえば、設定ファイルから設定値を

    2006-08-26
    sirocco
    sirocco 2011/06/09
     unsafePerformIO・・・。あとで読む。
  • 関数型!侵略ノススメ☆ - 純粋関数型雑記帳

    (この記事は Functional Ikamusume Advent Calendar jp 2010 の為に書かれました) 侵略!侵略!侵略!侵略!侵略!侵略!イカ娘! 再帰しなイカ? main = putStrLn $ f 6 where f 0 = "イカ娘!" f n = "侵略!" ++ f (n-1) 古風に再帰しなイカ? main = putStrLn $ f 6 where f 0 = "イカ娘!" f (n+1) = "侵略!" ++ f n 左派じゃなイカ? main = putStrLn $ foldl (\a _ -> "侵略!"++a) "イカ娘!" [1..6] 右派じゃなイカ? main = putStrLn $ foldr (\_ a -> "侵略!"++a) "イカ娘!" [1..6] 右派に見せかけた左派じゃないか? main = putStrLn $

    関数型!侵略ノススメ☆ - 純粋関数型雑記帳
    sirocco
    sirocco 2011/04/23
    動作を理解出来ないのが1/3くらいある・・・orz 調べてみよう。
  • One-liner in Haskell - 純粋関数型雑記帳

    Haskellを現場言語にするために、こんなものを作ってみました。 hoe: Haskell One-liner Evaluator (名前には深い意味はありません。) Haskellでワンライナーをやろうという誰得なツールです。誰得ですが、ワンライナーでも、型があると便利なんではなかろうか、型を元にユーザの望みの動作が大体決定できるんではなかろうか、という発想を元に作られました。 Haskellのワンライナーは、ghc -e でも評価できますが、これは (Show a) => a か、 (Show a) => IO a な型しか評価できません。hoeでは、String -> String など、もっと色々な型を評価できます。そして、その型に応じていい感じの動作が自動的に選択されます。 例えば、idを入力すると、入力がそのまま出力されます。 $ cat tmp Hello, Haskell

    One-liner in Haskell - 純粋関数型雑記帳
    sirocco
    sirocco 2011/04/23
    Haskellでワンライナーをするためのツール。
  • Haskellのエラー処理とMonadCatchIOの落とし穴 - 純粋関数型雑記帳

    (この記事はHaskell Advent Calendar jp 2010のために書かれました) Haskellではエラー処理に例外が用いられます(MaybeモナドやErrorモナドも用いられますが、ここでは例外に焦点をあてます)。 例外インターフェースの話 Haskellにも、例外を扱うためにtry, catch, finallyなどが用意されています。他の多くの言語ではこれらは構文として用意されますが、HaskellではIOモナドを引数にとる関数になっています。 try :: Exception e => IO a -> IO (Either e a) catch :: Exception e => IO a -> (e -> IO a) -> IO a finally :: IO a -> IO b -> IO a tryはIOアクションを引数にとり、それを実行した結果が正常に値を返

    Haskellのエラー処理とMonadCatchIOの落とし穴 - 純粋関数型雑記帳
  • Lazy I/O must go! - Iteratee: 列挙ベースのI/O - 純粋関数型雑記帳

    最近ちょっと気になるiterateeを勉強したので、日語の解説を書いてみます。と言いつつ、大部分が The Monad.Reader Issue 16 *1 からの引用です。 はじめに Iterateeと呼ばれる新たなI/Oの抽象化手法が、最近にわかに広まりつつあります。既存のI/Oが抱える問題を解決するべくOleg Kiselyovによって2008年頃に提唱されたiterateeは、新しい高性能webフレームワークsnap *2 や、hyena *3 で利用されています。また、HackagDB上にて、iterateeパッケージ*4、およびiterateeを利用できる様々なパッケージ *5 *6 *7 *8 が公開されています。 しかし、ドキュメントの少なさなどからiterateeがどういうものなのかよく分からないという人も多いようです。そういうわけなので、iterateeを易しく解説し

    Lazy I/O must go! - Iteratee: 列挙ベースのI/O - 純粋関数型雑記帳
  • ICFP Programming Contest 2010 優勝 - 純粋関数型雑記帳

    Pure Pure Code ++ Language: C++, Haskell, Python ... are the programming languages of choice for discriminating hackers. 今年のICFP Programming Contestにて優勝しました。(コンテスト中の様子は http://d.hatena.ne.jp/tanakh/20100702#p1 こちらにあります) 一次ソース(http://www.icfpcontest.org/2010/)はまだ来ていませんが、今年のICFP@ボルチモアにて表彰されてきました。こちら(http://twitpic.com/2swi5c)に証拠写真がアップロードされています。 Our Score: 13597.354 Our Solved: 3451 Our Cars: 72 >=5

    ICFP Programming Contest 2010 優勝 - 純粋関数型雑記帳
  • HaskellによるWebアプリ - 純粋関数型雑記帳

    http://tanakh.jp/hl/ darcs get http://tanakh.jp/repos/haskellitter/ Haskellでtwitterのようなものを実装しました。 試験的に公開してみます。 皆様利用して感想など頂けると幸いです。 Web2.0的な素敵な背景は、tkngさんに作っていただきました。 ありがとうございます。 全体的なページのデザインは私が適当にポコポコ作ったので、ひどいです。 このシステムは日々の普通な使用にゆるゆると耐えてくれればよいかなと思っておりますが、 最低限のスケーラビリティは考えて設計されております。 投稿データ〜1000万程度まで保持できることを考え、 そのデータに対し現在提供しているあらゆるクエリをノータイムで返すことができます。 投稿、削除、星をつけるなどの操作からランキングをリアルタイムに更新します。 ページはすべてたどること

    HaskellによるWebアプリ - 純粋関数型雑記帳
  • wxHaskell (その3) - 純粋関数型雑記帳

    前回積み残しのコンソールが出てしまう問題だが、 PEファイルのフォーマットを調べるとSubsystemのフラグに それっぽいものが有ったのでいじってみると見事出なくなった。 これにて解決である。(これで良いのか…?) 後学の為に場所を記しておく。 (こんなとこだけ記されてもうれしくない方はちゃんとしたところで PEファイルのフォーマットを調べましょう) ここ(アドレスDCh)の2バイトが0002hだとWindowsGUIアプリということのようである。 (追記: リンカのオプションにオプションがあるようです…。 ですので、上のような書き換えをせずとも ghc -optl -mwindows で良いようです) 続いて根的問題のように思える日語について考える。 そもそもなぜ日語が使えないかというと、GHCがSJISを 受け付けてくれないからなのである。 プログラムの動作としては、Strin

    sirocco
    sirocco 2008/04/21
    リモートのLinuix上で動作しているPostgreSQLのEUC-JPのデータを読んでSJISで表示するとSegmentation faultを起す文字列がある。原因は特定できていないがEUC-JPならOK。0x5Cを含む文字でもない。
  • 1