DRYな備忘録

Don't Repeat Yourself.

OCamlでHello World

\オッキャムル/

% brew search ocaml
ocaml     ocamlsdl
% brew install ocaml
==> Downloading https://homebrew.bintray.com/bottles/objective-caml-4.02.1_2.yosemite.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring objective-caml-4.02.1_2.yosemite.bottle.1.tar.gz
🍺  /usr/local/Cellar/objective-caml/4.02.1_2: 776 files, 75M
% which ocaml
/usr/local/bin/ocaml
% ocaml -version
The OCaml toplevel, version 4.02.1

Hello, Ocaml!!

First steps in OCaml

% vi hello.ml

hello.ml

(* 2000億円ほしい *)
print_string "Hello, Ocaml!!\n";;
% ocamlc -o hello hello.ml
% ./hello
Hello, Ocaml!!
%

FizzBuzz

fizzbuzzくらいはやろう

FizzBuzz OCaml · GitHub

(* 2000億円ほしい *)
print_string "なんかとりあえずfizbuzでもやる\n";;

(*
 * match (タプル) with | 条件 | 条件 みたいなのは
 * パターンマッチングという文法のようだ
 * http://ocaml.jp/OCaml%E5%85%A5%E9%96%80(2)#content_1_3
*)
let fizbuz i = match ((i mod 3), (i mod 5)) with
    | (0,0) -> "fizbuz"
    | (_,0) -> "buz"
    | (0,_) -> "fiz"
    | (_,_) -> string_of_int i ;;
(* 見るからに、fizbuzという関数はintを受けてstringを返す関数のようだ *)

(* ループしてんのはこいつなのか *)
(* for i = 1 to n do ほげほげ がループっぽい *)
(* しかし関数の定義が、letなのはわかるけど *)
(* どっからがfunc bodyなんだ... *)
let do_fizbuz n = for i = 1 to n do
    (* ()は基本タプルだと思ってたけど、 *)
    (* 呼び出しも(関数 引数)のようだ *)
    (* タプルになるのは,をつけたときなのかな *)
    Printf.printf "%s\n" (fizbuz i)
    (* これはきっと for to do のブロックの終了だと思われ *)
    done;;

(* mainのスコープで関数を呼び出す *)
do_fizbuz 30
% ocamlc fizbuz.ml
% ./a.out

思ってたよりとっつきにくくはなさそうだとおもいましたまる

DRYな備忘録