どう書くのバイナリクロックの問題をOCamlで
プリントするとこで小一時間悩んだ。で、アレイをハッシュみたいに使ってしまった。
let itobin i =
if i == 0 then [0]
else
let rec itob l i = match i with
0 -> 1::l
| 1 -> 1::l
| _ -> itob ((i mod 2)::l) (i/2)
in itob [] i
;;
let rec padding l =
if (List.length l) < 6 then padding (0::l)
else l
;;
let format_print l =
let d = [|"□";"■"|] in
let rec square_print l = match l with
[] -> print_string "\n"
| s::r -> print_string d.(s);
square_print r
in square_print l
;;
let () =
let t = Unix.localtime(Unix.time()) in
format_print (padding (itobin t.Unix.tm_hour));
format_print (padding (itobin t.Unix.tm_min))
;;
コンパイルして実行
$ocamlc unix.cma binary_clock.ml -o binary_clock
$ ./binary_clock
□■□■□■
□■■□□□