2008-09-01から1ヶ月間の記事一覧

fixと無限リストの相性

昨日のポストは単なるいかさまだったわけですが、これに懲りずに、また何か展開があったら懲りずにデータ再帰についてポストしていきたいと思います。(泣)それとは別に、fixで無限リストを生成するコードが書けたのでそれについて簡単に書いておきたいと思い…

インチキデータ再帰と単位換算

[追記:データ再帰を使ったコードを書こうと思っていたのですが、出来上がったものはデータ再帰に放っていませんでした…とほほ…/追記] また、データ再帰のことです… Recursive Monadic Bindingsの論文などを眺めていると、よく出てくるのが電子回路のサンプ…

fixを無限再帰させないもう一つの方法

引き続きfixのことです…昨日の文章を書いた後、しつこくRecursive Monadic Bindingsの論文を眺めていました…この論文は主にモナド関数を使ったfixの話なのですが、例のいくつかを眺めていてもfixの使い方が fix :: ((a -> a) -> a -> a) -> a -> a ではなく …

fixを使うためのヒント

効率化の話はなんだか疲れるので、またデータ再帰の話へ脱線… id:dachs_hippoさんのfixに関する記事をボーっと読み返していてあることに気づきました…氏のサンプルのひとつは階乗の計算だったわけですが: import Data.Function g :: (Int -> Int) -> Int ->…

Data.List.unionは結構重そう

数独ソルバー効率化第2回です…今回も20%程度の効率化なのですが内容が面白みにかけるのでさらっと…数独では一つのマスの値が決定したときにそのマスと依存関係にあるマスの制約条件が厳しくなります。時にはそれだけで値が決定してしまうこともあるわけです…

データ再帰という考えと双方向リスト

今日はちょっとコードの効率化の話をいったんお休みして、別の話を書きたいと思います。以前に書いたControl.Arrow.loopでも実はさりげなく出ていたのですが、Haskellではletとwhere節の部分でちょっと変わったことができます。Control.Arrow.loopの定義を見…

リスト操作のコスト

さて、前回のプロファイルの結果で明らかになった数独ソルバーの最悪のホットスポットはexcludeという関数だったのですが、一体何をやっていたのでしょう…500万回呼び出されて250Mバイトものメモリーを消費していました…excludeは実は次のような関数でした… …

Haskellのプログラムをプロファイルしてみる。

GHCではプログラムのプロファイルをとってくれる機能があります。 数独ソルバーのパ実行フォーマンスを見るのに使ってみました。GHCのマニュアルを見れば出ていることなのですが、GHCのプロファイラはいくつかモードがあって、ものによってはメモリの消費情…