Haskell
今回は ボナンザ型の評価関数(ここでは単にfv.binを使ったKKP/KPP評価のことを指すことにする)、であるコードを解析していく。 コード: hamilcar/Eval.hs at master · ysnrkdm/hamilcar · GitHub KPP/KKP Kは王、Pはピースで2つの王と一つの何かしらの駒、…
前回は外観を見始めて、エントリポイントから評価関数のところまで追いかけてみた。そこで評価関数はボナンザ型の評価と駒割りの足し算となっていることがわかった。 今回は駒割りの部分に注目してみる。 駒割りとIArray IArrayはHaskellにおけるimmutableな…
将棋ぶらうざQで対局をしてみた Gyazoというサービスがあるのでそれを使って対局の模様をGIFアニメにしてみた。 (このサービスすぐアップロードしてくれて便利。) 将棋ぶらうざQはGUIの完成度は高いし、Haskellの将棋プログラムも動かすことができたので、こ…
公式にあるIntelliJのHaskellプラグインはIntelliJでHaskell開発をする上で無くてはならないのだけど、まだまだ発展途上で応用的な機能(例えばリファクタリングとか)は殆ど無かったりする。今のところghc-modiを使ったEmacsでいうflymake的なエラーチェック…
偉大な先人のコード片からコンピュータ将棋を始めてみる。 実は昔からコンピュータ将棋には興味があって、いくつかものすごくプリミティブなプログラムを書いたことがある。 このリンク先のエントリに触発されて、Haskellでもぜひコンピュータ将棋のプログラ…
cabal sandboxというのはPythonでいうvenvみたいなもの。グローバルのライブラリとかパッケージとかを汚染せずに、そのプロジェクトだけのisolateされた環境の中でパッケージのインストールとかを行える。 公式サイトの説明は以下。 https://github.com/cres…
HaskellをサポートしているPaaSは少ないのだけど、OpenShiftが対応しているらしいのでいっちょ頑張ってHello, world.までやってみる。RedHadがやってるので、そんなに早く閉鎖することはないだろう。HaskellをサポートしているPaaSはWeb/Cloud - HaskellWiki…
前回はfor-eachで修正用コーパスの単語をひとつひとつテストすることができるようになった。 次は修正用コーパス全体に対して修正率を算出して表示できるようにする。 assertLT/assertGTをつくる HUnitにはどうも「aがbより小さい」みたいなAssertionがない…
前回は単語修正用のコーパスファイルを読み込んで、それをタプルのリストにするところまでできた。今回はそれを使って、スペル修正を評価することを試みる。 コーパス内のファイルをfor-eachでひとつひとつテストする:forMを使う、解剖してみる for-eachした…
前回はユニットテストの下ごしらえをして評価を実装する手前までやってみた。前回まででIntelliJ上でボタンクリックでユニットテストが走る。この上に実際に評価をするためのコードを書き足していこう。 スペル修正プログラムはどう書くかによると[OTA] Birk…
前回はひとまずスペル修正プログラムが完成して、コマンドラインから修正したい単語の引数を与えるとその修正した単語と修正候補のトップ5が表示されるようにしてみた。 今回はスペル修正プログラムはどう書くかに従って、このスペル修正プログラムの評価が…
前回は修正候補を列挙する関数を定義した。スペル修正プログラムはどう書くかをなぞりながらいろいろ関数を定義してきたが、今回はそれらを使って最後残っている関数correctを定義していきたい。 スペル修正プログラムはどう書くかによればcorrectはエラーモ…
前回はURLをフェッチするモジュールを外部化してMainモジュールはいまスペル修正ロジックだけを含むようになっていて大変見通しがいい。なので、コーディングを進めて今回はスペル修正に必要な候補を列挙する関数を書いていきたい。 編集距離から候補単語の…
cやcppを使ってプログラムを書いている人はlintが手放せないはず。lintはプログラムの字面を使って解析をして脆弱性や改善点を指摘するプログラムだ。 lint - Wikipedia HaskellにもHLintがあって、これを使うとコードの良くないところを指摘してもらえる。 …
前回は文字列をText型で取り扱うように全体を書き換えてすこし見通しが良くなった。 次は、URLをフェッチする部分を外部モジュールに抜き出して、さらにローカルキャッシュ機能を付け加えていこう。 まずfetchUrlを外に追い出す リファクタリングだ! fetchU…
前回は、スペル修正プログラムに必要なword関数(外部のテキストファイルを読み込んで単語列を作り出す)とtrain関数(その単語列から単語->出現回数なるマップを作り出す)を定義した。 ここから一気に後半の部分を完成させたいところだけど、すこしコードを綺…
Peter Norvigのスペル修正プログラムはどう書くか(リンク先は青木氏による日本語訳)を見てみると画面一枚に収まるような短いPythonコードでスペルチェッカがかけることがわかる。スペルチェッカみたいなちょっと高度なことをしているプログラムが書けると、…
前回のエントリで、Haskell+IntelliJの環境が出来上がった。プラグインとかHLintとか準備出来てないけど、とりあえずプログラムは書けるようになった。公式の10分で学ぶHaskellにHaskell入門があるけど、ちょっと知能指数の低い俺には長かったり、例えば文字…
このエントリはバージョンアップグレード版があります Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インストール - euphonictechnologies’s diary Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インス…
Thanks for haskell-cafe@haskell.org If you have a problem when you install uniplate (or ghc-mod, hlint, etc...) by cabal: Loading package base ... <command line>: can't load .so/.DLL for: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platf</command>…