2008-01-01から1年間の記事一覧

FOAS, HOAS, PHOAS - もうちょっとわかりやすく

絶賛現実逃避中。先のエントリ PHOAS - Parametric Higher Order Abstract Syntax - を Haskellで - keigoiの日記 は phantom typeやら GADTやらを含んでいてわかりにくかったので もっと簡単にした FOAS {-# LANGUAGE FlexibleInstances #-} import Control…

Haskell GADTで存在型から型を復元

GADTは証拠みたいなもの(というか証明)なので この証拠さえあれば 型を存在限量で隠蔽しても パターンマッチングで復元できてしまうのであった。 コード {-# LANGUAGE GADTs #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE KindSignatures #-…

PHOAS - Parametric Higher Order Abstract Syntax - を Haskellで

当該タイトルの論文は http://dx.doi.org/10.1145/1411203.1411226 論文では Coqで書いてあるが、同じことが Haskell (+GADT) でもできるようで、Haskell-cafe に投稿されていた: http://www.mail-archive.com/haskell-cafe@haskell.org/msg48913.html HOAS…

継続渡しチックな 存在型 を Haskellで

と、自分でも何を言ってるのか分からねーですが、タイトルに継続と書けばとアクセス数とブクマが増えるのでそう書く(←最低)。あながち遠くはないはずだけどOCamlでHaskellのforall を使うような存在型を直接書く事はできないらしい。 そこで #002 存在型 - K…

PHP strtotime('now + seconds') の思い出

PHP

2008-12-23 で思い出したのですが、 strtotime('now + seconds') という式でハマったことがあります。 コード

Haskell 型クラスで型推論を制御 (zipWith編)

型レベル計算で、zipWith をやりたい。 ちなみに zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] で、まあそういう関数だ。しかし まともに使える関数を作るには、陽に型を指定せずとも型が推論されてくれないと困る。そこで zipWithに渡す関数の種類を、引…

Haskell 型クラスと定理証明

型レベルの数値と、引き算Sub, 型レベルのconsリスト、リストの長さを求める型クラスLengthと関数length_tを定義する。 data S n data Z class Sub n n' n'' | n n' -> n'' instance Sub n Z n instance Sub n n' n'' => Sub (S n) (S n') n'' class Length …

Haskell 型レベル計算で継続渡し

やってみた 訂正: id:athos くんの指摘により。 やりたいこと 木を深さ幅優先探索して n 番目の要素を取得する。 関数型言語でならこんな風に継続渡し形式(CPS)で書けばよい: data Tree a = Tree a :*: Tree a | Leaf a nth :: Int -> Tree a -> a nth n t …

htree + rexml で フル XPathを使う

htree は柔軟というかpermissiveだと謳われているのでスクレイピングにはちょうどよさげ。 hpricotは全然xpathをサポートしていなかったのでこのhtree+rexmlを使う。 require "rexml/document" require 'htree' doc = HTree('<div><p>abc</p><div><p>def</p><p>ghi</p></div><p>jkl</p></div>').to_rexml names …

htree を OSX にインストールするときにこけた

htreeはxmlやhtmlをparseするための rubyのライブラリらしい。 ruby install.rb とやったらば、 install.rb:19:in `target_directory': could not find target install directory (RuntimeError) となってこけた。ruby初心者なのでよくわからないけど、 def …

Ruby REXML XPath バグ

REXMLのXPathを使ってみたが、今のところあまり使えない。作者いわく: Some of the XPath functions are untested8. Any XPath functions that don't work are also bugs... please report them. If you send a unit test that illustrates the problem, I'…

遅延評価マジック

前回の OCaml-Nagoyaで Haskellの遅延評価とvalue recursionを使ったネタの記事を紹介したら皆けっこうおもしろがってくれた。 で、OCaml や SML といった 遅延評価モジュールがある言語ではどう書く? というネタで さらに少し盛り上がった。rp_min は lazy…

Implementing CCS in Maude2

やっぱりπ計算の前にCCSだよねーということで Implementing CCS in Maude2 (著者による.ps) を軽く読んだ。 ラベル付き遷移を書き換えでやるのは案外面倒らしく、せっかくの | や + がfrozenになってしまっている(前回のπ計算ではラベル無しのreduction(τ遷…

MaudeでCCS 拡張編

ここ で書いた abort 演算子を Maudeで実装した。 CCSの構文と意味は先ほどのエントリのものをつかった(ちょっと変えたけど)。http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/ccs-abort.maude 演算子を追加 op _:_abort_ : Act Process Process -> Pro…

MaudeでCCS 拡張編 (2) Hennessy-Milner logic でチェックしてみる

http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/ccs-abort.maude ←今日のエントリで使っているMaudeのソースコードものぐさなので ちゃんと解説を書くのがめんどいのです… 問題 abort 演算子のチェックのために eq context = ('AbtTest =def (('a : 'b…

Maudeのお勉強

Maudeは書き換え論理(rewriting logic)だとかメンバシップ等式論理(membership equational logic)の項を書いたり動かしたりできる。 今の僕の理解ではMaudeは項書き換え系のめっちゃリッチな実装とだけ思っている。 →の前後が等価であれば CafeOBJ みたいな…

OCamlの並行プログラミング拡張 concurrent cell

OCaml-Nagoyaの会にて、id:osiireさんの concurrent cell (OCamlの並行プログラミングの拡張) の話を伺った。 当日の話について詳しくは ocaml-nagoya : ivarの必要性 より。当初、問題そのものがちょっとよくわからなかったのだけど、要するに OCamlの標準…

wrap_abort の話 ()

OCaml (Concurrent ML?) の Event.wrap_abort という関数はちょっと面白い. val wrap_abort : 'a event -> (unit -> unit) -> 'a event wrap_abort ev fn returns the event that performs the same communications as ev, but if it is not selected the f…

Event.wrap_abort を π計算 で表現してみる その2

ひとつ前のエントリ でテキトーに作った abort 演算子を使って、OCamlプログラムのコード例を追ってみる。 open Event let start_server () = let in_ch = new_channel () in let rec loop () = let (x, ret_ch, nack_ch) = sync (receive in_ch) in loop (s…

C++ コピーコンストラクタと変換演算子と明示的な(explicit)コンストラクタ

C++

こんな細かいことが気になるコードを書く時点で相当ダメなカンジですが,つい気になったので試してしまった. C++界隈では相当使い古されたネタに違いない.codepad : http://codepad.org/WxvP2RoB #include <iostream> using namespace std; class B; int getdatafrom</iostream>…

Language.C の意味解析 (1)

気をとりなおして。 Haskell用の C言語のパーザライブラリ Language.C の意味解析機能を使ってみる。まずはグローバルスコープのシンボルテーブルを表示してみる。 こんなことができる 入力 (sample.c) enum enum1 {x, y, z}; void fundec1(); struct st1 { …

Language.C (cont.) - flexible array member(C99) を サイズ0の配列(GNU C互換)に変換

jhcが生成した手元のコードを gcc 2.95でコンパイルするにはもうひとつ障害があった.JHCはサンクを以下の構造体で管理するようだ: typedef struct node { fptr_t head; sptr_t rest[]; } A_MAYALIAS node_t; typedef struct dnode { what_t what; sptr_t r…

Language.C を使ってC言語のソースコードを解析する (with Data.Generics)

Language.CはHaskell用の、C言語のソースコードを構文解析するライブラリである。 Language.CはパーザとともにC言語の構文木に相当するデータ型を提供しており、C言語のソースコードをHaskellのデータとして操作可能である。このため、Language.CはC言語のコ…

Java Swing Metal Look & Feel title bar printing bug fix

bug description Swingの印刷機能を用いるとき、Mac OS X の VMでは、次の状況で、例外が発生する. MetalのLook&Feelを使っている JInternalFrame等、タイトルバーがウィンドウの内部に描画されている ウィンドウ内部を printAll() メソッド等で印刷しよう…

何故か書いてしまったduck typing (Haskell,存在型+型クラス)

存在型+型クラスでduck typing. 参照:http://www.haskell.org/haskellwiki/Existential_type 既に言及されてますが、このやり方だとHaskellはnonintrusive-explicit-dynamic に該当しますね。 テーブル修正しました。 class Duck a where quack :: a -> IO …

hibernate3 + hibernate-annotations 入門 (ry

id:mallowlabsのラブコールを受けて着手。でもあまり進まなかった。 Hibernateは無駄に奥が深いので困るです。 ダウンロード ダウンロード (ちょっと更新)http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/hibernate_sample1.zip

struts2の入門資料を書いている

日本語の資料があんまりないstruts2について、うちわ向けの入門資料をがんばって書いています。まだ途中です。 おわりました。 ダウンロードはこちらから 更新しました→ http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/20080725/色々欠けているような…

500 error when you access at /struts/dojo

struts2を使ったwebアプリの、 /struts/dojo にアクセスすると 500エラーが出てしまいます。 例えば: http://planetstruts.org/struts2-blank/struts/dojo http://planetstruts.org/struts2-showcase/struts/dojoこんな例外がでてます: java.lang.NullPoint…

can't load .so/.DLL -- GHCi on MacOSX [SOLVED]

これの続き。単に MacPortsでdlcompatというライブラリをインストールすれば解決した。 port -d -v install dlcompat私の環境では、ビルドは途中で失敗したが、 dlfcn.c:819: warning: Pragma CALL_ON_LOAD is deprecated; use constructor attribute instea…

can't load .so/.DLL?

MacOSXで GHCi (MacPorts版) を動かしているとたまに Loading package unix-2.3.0.0 ... can't load .so/.DLL for: dl (dlopen(libdl.dylib, 10): image not found)等で失敗する.wxHaskellでもよくこういうことがあった。それではと、 DYLD_FALLBACK_LIBRAR…