ocaml

久しぶりにocaml

ocamllexとかocamlyaccとかを使う前に、ocamlの文法とかを忘れてしまっているような気がする。 何か問題を解いて思い出そう。 与えられた正の整数のローマ数字表現(文字列)を求める関数roman(I = 1,V = 5,X = 10,L = 50,C = 100,D = 500,M = 1000)…

久しぶりにOcaml(pascalの三角形)

まずはふつうに let rec pascal = function 1 -> [1] | n -> let prev = pascal (n-1) in let right = 0 :: prev in let left = List.rev right in List.map2 (+) left right memo化したい let pascal2 n = let mem = Array.init n (fun x -> []) in let rec…

ocamlの関数の補完をするelisp

まだ完成していないけど、途中経過をUpしてみます。 長いので、別のところにupした方が良かったかもしれません。 使用方法 ファイルの冒頭にあるコメントの部分を.emacsに貼り付ける (好きなキーにbindする) anything-ocaml-reference-completionsが補完 an…

graphicsモジュールで遊ぶ3

2分木。 m分木にしたい(今は2だけ) 描く方向を変えたい(今は上方向だけ) open Graphics let f x0 y0 r = let draw x y = draw_segments [|(x0, y0, x0+x, y0+y)|]in draw (-r) r; draw r r let rec g x y n r= match (n,r) with (0,_) -> () | (_,0) -> ()…

ocamlのプログラムを楽に実行できるようにする。

ocamlのプログラムを実行するには、compileが必要です。 そして、compile時に使ったモジュールのファイル名を指定しなければならないです。 例えば、こんな感じです*1。 #unixモジュールとgraphicsモジュールを使用した時 #作ったファイルの名前はtest1.ml o…

graphicsモジュールでお絵描き2

open Graphics let f n = let g x = Random.int x in let getcolor () = rgb (g 255) (g 255) (g 255) in let rec loop n = match n with 0 -> () | n -> set_color(getcolor ()); fill_circle (g (size_x ())) (g (size_y ())) (g 50); loop (n - 1) in loo…

ocamlのgraphicsモジュール

ocamlが一番絵を描くのが簡単な言語かもしれません。 標準で、絵を描くためのモジュールがついてきます。 (* draw.ml *) (* graphics.cma と unix.cmaを使う *) open Graphics let color_size = 255 let rec plot_graph x (r,g,b) n f= let rec loop (r,g,b)…

(ocaml5)プログラミングinOCaml

プログラミングinOcamlを始めてみました。 練習問題5.1〜5.8まで (* ;;練習問題5 *) (* 5.1 *) [[]];; (* [[1;3] ; ["hoge"]] ;; 型が違うので無理 *) [3] :: [];; (* 2 :: [3] :: [] 型が違うので無理 *) [(fun x -> x); (fun b -> not b)];; (* 5.2 *) let…