OCaml

OCatraをLwt使うようにした

OCatraをいろいろ直したり、ベンチマークとってみたり - komamitsu.log で作っていたOCamlのおもちゃ的Webサーバー OCatraをLwtを使うように修正してみた。 1st 2nd 3rd 4th Ave. OCatra (byte) 4238 4424 4299 4285 4311 OCatra (opt) 11806 12384 12381 12…

OPAMでインストールしたパッケージがocamlfindで見つからない件

OPAMいいですね。http://d.hatena.ne.jp/wistery_k/20120909/1347164530 の記事を見て使い始めましたが、道具としてのOCamlが何かの壁を乗り越えそうな感じがしてます。で、使っていて、たまにocamlfind -listの中にopamでインストールしたパッケージが出て…

OCatraをいろいろ直したり、ベンチマークとってみたり

komamitsu/OCatra · GitHub のkeepaliveまわりのバグとかを直したり、モジュール名を変更したりしました。Eventモジュールを使ってすっきり書いた方が良さげだなぁとか思っているのですが、現状そんなにややこしい制御をしていないので、まぁいいかと。あと…

OCatraを短くかけるように修正

SinatraっぽいOCatraを書いてみた - komamitsu.log で作ったOCatraですが、もうちょっとすっきり書けるように修正。 open Ocatra open HttpCommon open HttpCommon.HttpContent let _ = get "/" (fun r -> say (TextPlain "Hello, World (GET)") ()); post "…

SinatraっぽいOCatraを書いてみた

先日、やっつけのWebサーバーを書く際にRubyのSinatraで書いてみたのですが、「簡単に書けて良いな〜」と思ったので、OCamlでもそれっぽいものを適当に作ってみました。komamitsu/OCatra · GitHub現状はこんな感じでかけます: open Ocatra open HttpCommon o…

いまさらのN Queen問題

最近、Scalaのコップ本を読んでいるのですが、例題でN Queen問題が出ていて、結構すっきり書かれていてへぇ〜って思いました。そういえば、N Queen問題は試したことが無かったのと、このところコードをあまり書いていないような気がしたので、気分転換にOCam…

パーセプトロンの練習

最近、機械学習に興味を持ち始めていて、SVMを実装してみようと思ったら、挫折したのでやはり段階を踏むべきであろうということでパーセプトロンから試してみた。komamitsu/ocaml-perceptron · GitHub perceptron.ml let ($) f g = f g let print x = Hashtb…

merge sort

Gistが貼っ付けられるかテスト

functor適用するときtypeに直接record型を定義すると怒られる件

↑のpostで引っかかったので単純な形にして確認してみた。 functor.ml (functorの定義) komamitsu@carrot:~/lab/ocaml$ cat functor.ml module type HogeType = sig type t val string_of_t : t -> string end module Make(Hoge : HogeType) = struct let pri…

A* search algorithm用のモジュールを書いてみた

仕事ではOCamlもA* search algorithmも全く使っていないのですが、自宅で気分転換/リハビリがてら何か書こうとすると、すぐOCamlでA* search algorithmを書いてしまいます。たまにダイクストラ法で何かgraphを探索するやつも書きます。毎回同じようなものを…

初Lwtでecho server

書いた。 https://gist.github.com/1362149これ↓を参考に https://github.com/avsm/ocaml-cohttpserver/blob/master/server/http_tcp_server.ml 適当に書き始めたのだけど、途中で「やばい徹底的にmonadicに書かないと動かないというかコンパイル通らない」…

x86_64環境でのocaml-mysqlが上手く動かなかった件

先日から、AWS EC2上にFree usage tierのインスタンスを作って、CPU使うようなことはそちらで行おうとしています。まぁきっかけは節電なんですが、もともとEC2に興味があったので。それはさておき、動かそうとしているのはMySQLをstorageとしたOCamlのプログ…

りはびり(Ordシグネチャーとファンクターを使って独自のTreeモジュールを作る)

久しぶりにOCamlでも書いてみようかと思ったら、全然書けなくなっていたのでリハビリをすることに。お題は @osiire さんの http://d.hatena.ne.jp/osiire/20101101 のレベル3。といってもこれまでの経験上、最初の「Ordシグネチャーとファンクターを使って独…

オセロゲームを作ってみた

http://bitbucket.org/komamitsu/misc/src/tip/ocaml-reversi/作ってみようかと思ったのは、ふと「ちゃんとゲーム木を実装したことが無いなぁ、特にαβカット周りは全然やったことない」と思ったからなのです。できれば、min-maxの部分を切り分けておいてオセ…

deep copy

OCamlで # let orig = Array.init 8 (fun _ -> Array.create 8 "x");; val orig : string array array = [|[|"x"; "x"; "x"; "x"; "x"; "x"; "x"; "x"|]; [|"x"; "x"; "x"; "x"; "x"; "x"; "x"; "x"|]; [|"x"; "x"; "x"; "x"; "x"; "x"; "x"; "x"|]; [|"x"; …

言語作成とか

このところocamlyacc/ocamllexで簡単なインタープリターを作ろうとしていたのだけど、どうも萌えてこないので、適当な所でやめておいた。これは確固たる目的(xxxのために新しい言語が必要とか)が無いから萌えてこないのかなぁ、と思ったけれどアルゴリズム…

B-Tree

B-Treeアルゴリズムを試してみました。http://github.com/komamitsu/ocaml-b_treeB-Treeというのは多分木のアルゴリズムで、木の高さを低く保つことができてキーのバランスが良いので、結構DBのインデックスにそれ系統のやつが使われていてDisk I/O減らせて…

隠れパターンマッチとアロケートのコスト

http://rwmj.wordpress.com/2009/08/06/ocaml-internals-part-3-the-minor-heap/ を見ていて興味深かったコードがあったのでコピペして試してみた。 #load "unix.cma" let f1 (a, b) = (a, b) let f2 (x : ('a * 'b)) = x let f3 x = x let rec loop n f arg…

A beginners guide to OCaml internals

http://rwmj.wordpress.com/2009/08/04/ocaml-internals/ (http://d.hatena.ne.jp/camlspotter/20090805/1249476309 経由)実装について基本的なところを知りたかったので助かるなぁ。Article was good but fish face at the top scared the shit out of me!…

bench! bench! bench!

Skew Binary Random-Access Lists - komamitsu.logのベンチマークをとりたいなぁ、と思っていたところ、OCamlにBenchmarkというそのものズバリなライブラリがあったので試してみました。# ちなみに件のコードは MIT License に. aptでのインストールは以下 $…

Skew Binary Random-Access Lists

Linuxの環境整備に熱中していて、すっかり忘れていたけれど、http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf の 6.4.1章について。 これは何かというと、Skew Binary Numbers - komamitsu.logとBinary Random-Access List - komamitsu.logを合わせたランダ…

Suffix-Arrayの逆襲

http://d.hatena.ne.jp/komamitsu/20090503/1241369214 で List使って書いたら遅かった Array.append使ってSuffix-Arrayを構築したら全然処理が終わらなかった としょうもない感じだったので、改善してみました(http://github.com/komamitsu/ocaml-suffixar…

Binary Random-Access List

引き続き、http://www.cs.cmu.edu/~rwh/theses/okasaki.pdfを眺めていますが、今回はBinary Random-Access Listについてメモ。 これは完全二分木と二進数を合体させたリストみたい。 このリストは二進数のように0か1を持っていて、1の場合はその中に完全二分…

Skew Binary Numbers

先日、osiireさんにSkew Binary Random-Access Listsというのを紹介して頂いたので、http://www.cs.cmu.edu/~rwh/theses/okasaki.pdfを眺めていた。 これはSkew Binary Numbersというのに基づいているらしいので、まずそっちを見てみることに。いずれも初耳…

ListとArrayの性能

http://d.hatena.ne.jp/mzp/20090511/suffixを見て気がついたのだけど、先日ちょっと書いてみたSuffix Arrayの練習 - komamitsu.logがArrayじゃなかったことに絶望した。で、適当にArrayに置き換えてみたら、いつまでたっても処理が終わらなくなったので、簡…

Suffix Arrayの練習

前から少し気になっていたhttp://ja.wikipedia.org/wiki/Suffix_Arrayを試してみた。 gitの練習がてらgithubに => http://github.com/komamitsu/ocaml-suffixarray。 これと、Str.search_forwardでちょっと性能を比べてみたのだけど、Str.search_forwardの方…

ライフゲームモジュール

練習のため、http://d.hatena.ne.jp/komamitsu/20090326/1238081086をモジュールにしてみた。lifegame.mli type cell = N | C type world val create_world : cell array array -> world val make_next_world : world -> world val disp_world : world -> (c…

ライフゲーム

前々から気になっていたので、それらしいのを書いてみた。描画は手抜きでprintf。 (* ocamlfind c -package unix -linkpkg -o lifegame lifegame.ml *) open Printf let orig_world = [| [|0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0|]; [|0;0;1;0;0;0;0;0;0;…

資金管理(ピラミッド法)

カミさんとシステムトレードの話をしていて、資金管理がいかに大切かを話していたのだけど、そもそも本当に効果があるのか自分でも自信がなかったので、簡単に試してみた。以前、聞きかじった手法は 賭け金の初期値は五枚 勝ったら一枚減らす 負けたら一枚増…

香川大学さんと合同勉強会

一昨日、昨日は、香川大学の先生達がうちの会社に来訪され、合同の勉強会が開かれていました。かねてから親交があり毎年一回程度開催されているそうです。 T先生はデータマイニングのお話。 わたしは以前、趣味で日経平均先物のトレーディングルール検出シス…