BiGram
改行とか非Ascii文字とか考えてません。
http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20050624#p01
なにも考えずに書くとこうなります。
module StringMap = Map.Make(String) module BG = (struct include StringMap let find_exists s i bg = if (mem s bg) then (find s bg) else i end) let bigram s = let rec bigram0 s i = if (i+1 < String.length s) then let bg2 = bigram0 s (i+1) in let s2 = String.sub s i 2 in BG.add s2 ((BG.find_exists s2 0 bg2)+1) bg2 else BG.empty in bigram0 s 0 let _ = let bg = bigram "banana" in BG.iter (Printf.printf "%s:\t%d\n") bg
うは、なにこれ。かっこわるw。
Mapを定義して、String.subをぐるぐる回してるだけ。zipのzの字も出てきやがらねえ…Haskellはともかく、RubyとかPythonとかで書いたほうがかっこいいというのは…orz
しかし、こういうプログラムを書くと、自分がいかにプログラミングが下手かというのがわかってしまって、軽くへこむ。