« GHC is not Haskell | Main | C++わかんねー »

2007.07.21

並列論理型言語GHCとその応用

並列論理型言語GHCとその応用読みました。

ざっと斜め読みですが、論理型言語の入り口をのぞいてきました。最初の方にあるquick sortの並列性や、ストリームによるデータ処理は面白かった。Prologとの違いとか、Prologのコンパイルとかは、あまり興味がなかったので、ざっくりと読みました。一つわかったことは、Prologという表現は、Lispと同じくらい広いということ。Prologの弟分のようなGHCにすら、処理系が複数あるのが驚いた。perlがcgiを使うための言語じゃないように、Prologも難しい問題を解く言語じゃないと気がついた。上手く伝わるか自信が無いけど書いてみる。

論理型言語って、正規表現の位置づけじゃね?

正規表現だけじゃ普通のアプリを作れないけど、普通のアプリの中で正規表現をを使いたいときがある。正規表現の例で行くと、最初はsedみたいに専用ツールだったけど、perlみたい良いところを取り込んで機能を増やしたり、C++のBoost::regexpみたいにライブラリで実装されたり、みんなで使えるようにDLL化されたりしてきた。最初のPrologってのは、edとかsedに相当するんじゃないかな。perlに相当する爆発的なユーザーを持つような言語までは行かなかったけど、ライブラリという形で生き残っている(ex:Allegro Prolog)。ポール・グレアムも、彼の本の中で埋め込み言語としてlispでPrologを書いている。これは埋め込み言語の例を示したいだけじゃなくて、LispのライブラリとしてPrologの機能(論理型言語)を使いたいシチュエーションが何回もあったのだと思う。gaucheのshiroさんが、schemeの中で正規表現を使いたかったように。

問題を解くってことが、アプリレベルの話と、論理型言語の枠内では意味が違うという事もわかった。論理型言語を使うことで、「ある条件を満たす解は存在しません。」という事もわかる。これって、アプリケーションレベルでは問題が解けているということに気がついた。あるいは、ベストな解がわからなくても、「条件を満たす解が5個あります、この中から選んでください」と帰ってくるのも意味があるケースというのが多い。今、頭の中にちょうど良い事例が浮かんでるんだけど、仕事がらみなので上手くかけない。ざっくりいうと、FPGAの個数、規模、ピン数、基板サイズの組み合わせとか。ベストな解を出さなくても、この3つから選んでくださいってのが、条件の入力も入れて30分くらいで出てきたらすごく楽になる。人工知能と呼べるかもしれないけど、してほしいのはルールの中から総当たりでもなんでもよいので、満たす物をリストアップしてほしい。

論理型言語が得意な問題というのが意外にあって、結構論理型言語の枠内に入らなくて問題が解けたりする。これは、正規表現ライブラリ使わなくても、文字列の標準関数だけで乗り切れるのと同じ。何かキラーアプリがあれば、Prologもブレークするよ。

例えば、冷蔵庫にある具材から作ることが可能なレシピのリストを作るとか、論理型言語得意でしょ。1食ならともかく、朝、昼、夕となるとちょっと面倒。これにカロリー制限、一日20品目以上、調理時間(朝は15分だけど、土曜の夜は2時間までOKとか)等を入れ出すと、普通の言語だと厳しいと思う。つまり、今必要なのはProlog Cookbook。

|

« GHC is not Haskell | Main | C++わかんねー »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/15833284

Listed below are links to weblogs that reference 並列論理型言語GHCとその応用 :

« GHC is not Haskell | Main | C++わかんねー »