Objective Caml ¤Ç¤Ï¡¤¥Ð¥Ã¥Á¥³¥ó¥Ñ¥¤¥é ocamlc ¤òÍѤ¤¤Æ Objective Caml ¥×¥í¥°¥é¥à¤ò½ñ¤¤¤¿¥Õ¥¡¥¤¥ë¤«¤é¡¤¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥ ¤Þ¤¿¡¤¥×¥í¥°¥é¥à¤òÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤â ¤Ç¤¤ë¡¥¤³¤Î¤È¤¡¤Ê¬³ä¤µ¤ì¤¿Ã±°Ì¤ò¥â¥¸¥å¡¼¥ë¤È¸Æ¤Ö¡¥ Objective Caml ¥é¥¤¥Ö¥é¥ê¤â¥â¥¸¥å¡¼¥ë¤Î·Á¤ÇÄ󶡤µ¤ì¤Æ¤ª¤ê¡¤ ¤½¤Î»ÈÍÑÊýË¡¤ÏƱ¤¸¤Ç¤¢¤ë¡¥
¤Þ¤º¤Ï¡¤¥é¥¤¥Ö¥é¥ê¤Î»ÈÍÑË¡¤ò³Ø¤Ó¤Ê¤¬¤é¡¤´û¸¤Î¥â¥¸¥å¡¼¥ë¤Î »È¤¤Êý¤ò¤ß¤Æ¤æ¤¯¡¥Objective Caml ¤Î¥é¥¤¥Ö¥é¥ê¤Ï¡¤List, Array, Sort ¥â¥¸¥å¡¼¥ë¤Ê¤É¤Î¥Ç¡¼¥¿¹½Â¤¤Ë´Ø¤¹¤ë¤â¤Î¡¤Printf ¤Ê¤É¤ÎÆþ½ÐÎÏ¤Ë ´ØÏ¢¤¹¤ë¤â¤Î¡¤Sys ¥â¥¸¥å¡¼¥ë¤Ê¤É¤Î¡¤OS¤äObjective Caml ½èÍý·Ï¤È¤Î¥¤¥ó¥¿¡¼ ¥Õ¥§¡¼¥¹¤ò¤È¤ë¤¿¤á¤Î¤â¤ÎÅù¤¬ËÉÙ¤ËÍѰդµ¤ì¤Æ¤¤¤ë¡¥¤Ò¤È¤Ä¤Ò¤È¤Ä¤Î ¾Ü¤·¤¤µ¡Ç½¤Ê¤É¤Ï¥Þ¥Ë¥å¥¢¥ë¤Î19¾Ï¤ò¤ß¤Æ¤Û¤·¤¤¡¥¤³¤³¤Ç¤Ï List ¥â¥¸¥å¡¼¥ë¤È Queue ¥â¥¸¥å¡¼¥ë¤òÂêºà¤Ë¤¹¤ë¡¥
¥â¥¸¥å¡¼¥ëÆâ¤Î´Ø¿ô¤Ï¡¤⟨ ¥â¥¸¥å¡¼¥ë̾ ⟩.⟨ ´Ø¿ô̾ ⟩ ¤È¸À¤¦·Á¤Ç ¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡¥
# List.length [5; 6; 8];; - : int = 3 # List.concat [[4; 35; 2]; [1]; [9; -4]];; - : int list = [4; 35; 2; 1; 9; -4]
°ÊÁ°¤Ë¤ß¤Æ¤¤¿¥ê¥¹¥ÈÁàºî¤Î¤¿¤á¤Î´Ø¿ô rev, append, map, fold_left, fold_right Åù¤Ï¡¤¤Û¤È¤ó¤É List ¥â¥¸¥å¡¼¥ë¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡¥
Queue ¥â¥¸¥å¡¼¥ë¤Ï¡¤¤¤¤ï¤æ¤ëÂÔ¤Á¹ÔÎó¤Î ¥Ç¡¼¥¿¹½Â¤¤ò¼ÂÁõ¤·¤¿¤â¤Î¤Ç¡¤¥ê¥¹¥È¤Î¤è¤¦¤ËƱ¼ï¤Î¥Ç¡¼¥¿¤ò¤Þ¤È¤á¤Æ³ÊǼ¤¹¤ë¤Î ¤ËÍѤ¤¤ë¡¥add, take ¤È¤¤¤¦Í×ÁǤòÄɲ᤼è¤ê½Ð¤¹´Ø¿ô¤¬ ÍѰդµ¤ì¤Æ¤¤¤ë¤¬¡¤ÆÃħ¤Ï¡ÖÀèÆþ¤ìÀè½Ð¤·¡×¤Ç¤¢¤ê¡¤add ¤·¤¿½çÈ֤Ǥ·¤« take ¤Ç¤¤Ê¤¤¡¥ Queue ¥â¥¸¥å¡¼¥ë¤Ï¥â¥¸¥å¡¼¥ëÆâ¤Ç t ¤È¤¤¤¦Ì¾Á°¤ÎÆÈ¼«¤Î·¿¤òÄêµÁ¤·¤Æ¤¤¤ë¡¥¤³ ¤Î¾ì¹ç¤Ë¤Ï¡¤¤½¤Î·¿¤Ë¤â¥â¥¸¥å¡¼¥ë̾¤¬¤Ä¤¤¤¿·Á 'a Queue.t ¤Çɽ¤µ¤ì¤ë¡¥
# let q = Queue.create ();; val q : '_a Queue.t = <abstr> # Queue.add 1 q; Queue.add 2 q;; - : unit = () # Queue.take q;; - : int = 1 # Queue.take q;; - : int = 2 # Queue.take q;; Exception: Queue.Empty.
ºÇ¸å¤ËȯÀ¸¤·¤¿Îã³° Empty ¤Ï Queue ¥â¥¸¥å¡¼¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤¿¤â¤Î¤Ç¤¢¤ë¡¥
Ʊ¤¸¥â¥¸¥å¡¼¥ë¤ò»È¤¤Â³¤±¤ë¤È¡¤¤¤¤Á¤¤¤Á¥â¥¸¥å¡¼ ¥ë̾¤ò¤Ä¤±¤ë¤Î¤¬ÌÌÅݤˤʤäƤ¯¤ë¡¥open Àë¸À¤Ïʸ»úÄ̤ê¥â¥¸¥å¡¼¥ë¤ò ¡Ö³«¤¯¡×¤â¤Î¤Ç¡¤¥â¥¸¥å¡¼¥ëÆâ¤ÎÄêµÁ¤¬¥â¥¸¥å¡¼¥ë̾¤Ê¤·¤Ç¥¢¥¯¥»¥¹¤Ç¤¤ë¤è ¤¦¤Ë¤Ê¤ë¡¥
# open List;; # length [3; 9; 10];; - : int = 3
¤³¤Î open Àë¸À¤Ï¡¤open ¤·¤¿»þÅÀ¤Ç¤¹¤Ç¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ëƱ̾¤ÎÄêµÁ¤ò ±£¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¡¤Æ±Ì¾¤ÎÄêµÁ¤òÄ󶡤¹¤ëÊ£¿ô¤Î¥â¥¸¥å¡¼¥ë¤ò³«¤¯¤È¤¤Ë¤Ï ½çÈÖ¤ËÃí°Õ¤·¤¿Êý¤¬¤è¤¤¡¥±£¤µ¤ì¤Æ¤·¤Þ¤Ã¤¿Ì¾Á°¤Ï¡¤·ë¶É¥â¥¸¥å¡¼¥ë̾¤Ä¤¤Î µË¡¤Ç¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡¥
¥é¥¤¥Ö¥é¥ê¡¦¥â¥¸¥å¡¼¥ë¤Ï ocamlc -v ¤ò¼Â¹Ô¤·¤ÆÉ½¼¨¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê ¤Ë¥½¡¼¥¹¤¬ÃÖ¤¤¤Æ¤¢¤ë¡¥Î㤨¤Ð Queue ¥â¥¸¥å¡¼¥ë¤Ï(ºÇ½é¤Îʸ»ú¤ò¾®Ê¸»ú¤Ë¤·¤¿) queue.ml ¤Ë¤½¤Î¼ÂÁõ¤¬½ñ¤«¤ì¤Æ¤¤¤ë¡¥ ¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï .mli ¤È¤¤¤¦³ÈÄ¥»Ò¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤âÃÖ¤«¤ì¤Æ¤¤¤ë¡¥ Î㤨¤Ð¡¤queue.mli ¤ò¸«¤Æ¤ß¤ë¤È¡¤(¥³¥á¥ó¥È¤ò½ü¤¯¤È)
type 'a t exception Empty val create : unit -> 'a t val add : 'a -> 'a t -> unit
¤Ê¤É¡¤¥â¥¸¥å¡¼¥ë¤ÇÄ󶡤µ¤ì¤ë·¿¡¤Îã³°¤ä´Ø¿ô¤Î̾Á°¤¬Îóµó¤µ¤ì¤Æ¤¤¤ë¡¥ ¤Þ¤¿´Ø¿ô¤Ë´Ø¤·¤Æ¤Ï¤½¤Î·¿¤â½ñ¤«¤ì¤Æ¤¤¤ë¡¥
¤³¤Î¥Õ¥¡¥¤¥ë¤Ï Queue ¥â¥¸¥å¡¼¥ë¤Î³°Éô¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹(interface)¤òµ½Ò¤·¤Æ¤ª¤ê¡¤Queue ¥â¥¸¥å¡¼¥ë¤ò»È¤¦¾ì¹ç¤Ë¤Ï(¤½¤Î¼ÂÁõ¤Ë´Ø¤ï¤é¤º)¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë ½¾¤Ã¤Æ»ÈÍѤ¹¤ë¤³¤È¤¬µá¤á¤é¤ì¤ë¡¥
¡Ö¤½¤Î¼ÂÁõ¤Ë´Ø¤ï¤é¤º¡×¡Ö¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë½¾¤Ã¤Æ¡×¤È¤¤¤¦°ÕÌ£¤Ï¡¤ ¥â¥¸¥å¡¼¥ë¤Î¼ÂÁõ¤È¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ ¤òÈæ¤Ù¤Æ¤ß¤ë¤È¤ï¤«¤Ã¤Æ¤¯¤ë¡¥Î㤨¤Ð¡¤list.ml ¤Ç¤Ï¡¤chop ¤È¤¤¤¦´Ø¿ô ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤Î¤À¤¬¡¤list.mli ¤Ë¤Ï¤½¤Î̾Á°¤Ï½Ð¸½¤·¤Ê¤¤¤¿¤á¡¤ List.chop ¤È¤¤¤¦´Ø¿ô¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥¤Þ¤¿¡¤queue.ml ¤Ç¤Ï¡¤ 'a cell ¤È¤¤¤¦·¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤¬¡¤queue.mli ¤Ë¤Ï½Ð¸½¤·¤Ê¤¤¤¿¤á¡¤ ¤³¤Î·¿¤ÎÃͤòºî¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥(¤½¤â¤½¤â¡¤¤½¤ó¤Ê·¿¤¬Àë¸À¤µ¤ì¤Æ¤¤¤ë ¤È¤¤¤¦»ö¼Â¤¹¤é¸«¤¨¤Ê¤¤¡¥)¤³¤Î¤è¤¦¤Ë¡¤¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¤¥â¥¸¥å¡¼¥ë ÆâÉô¤Ç¤Î¶É½êŪ¤Ë»È¤¦´Ø¿ô¤ä·¿¤ò±£¤¹¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥
¤³¤Î´Ø¿ô¤Ê¤ê·¿¤Ê¤ê¤òÄêµÁ¤´¤È±£¤·¤Æ¤·¤Þ¤¦¡¤¤È¤¤¤¦°Ê³°¤Ë¡¤¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤è¤ë ¾ðÊó±£ÊäΤ⤦¤Ò¤È¤Ä¤Î·ÁÂ֤Ȥ·¤Æ¡¤¡Ö·¿¤ÎÄêµÁ¤ÎÃæ¿È¡×¤ò±£¤¹¡¤ ¤È¤¤¤¦¤³¤È¤¬¤Ç¤¤ë¡¥Î㤨¤Ð¡¤queue.ml ¤Ç¤Ï¡¤'a t ¤È¤¤¤¦¥¥å¡¼¤Î¥Ç¡¼¥¿¹½Â¤¤ò ɽ¸½¤¹¤ë·¿¤¬¥ì¥³¡¼¥É·¿¤ò»È¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤¬¡¤queue.mli ¤Ç¤Ï
type 'a t
¤È¤¤¤¦ = °Ê²¼¤¬¤Ê¤¤¤â¤Î¤¬½ñ¤«¤ì¤Æ¤¤¤ë¤À¤±¤Ç¤¢¤ë¡¥¤³¤Î¤è¤¦¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë µ½Ò¤¹¤ë¤³¤È¤Ç¡¤ t ¤È¤¤¤¦Ì¾Á°¤Î·¿¤¬Â¸ºß¤¹¤ë¤³¤È¤À¤±¤ò³°¤Ë¸«¤»¡¤¤½¤ì¤¬¼ÂºÝ¤É¤¦ÄêµÁ¤µ¤ì¤Æ¤¤¤ë ¤Î¤«¤ò±£Ê乤뤳¤È¤¬¤Ç¤¤ë¡¥¤³¤¦¤¤¤Ã¤¿±£Êäˤè¤ê¡¤t ¤ò¤¢¤¿¤«¤â¡¤ create, add ¤Ê¤É¤Î´Ø¿ô¤ò¥×¥ê¥ß¥Æ¥£¥Ö¤È¤¹¤ë´ðËÜ·¿¤Î¤è¤¦¤Ë³°Éô¤Ë¸«¤»¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ë¡¥
¤³¤Î¤è¤¦¤Ê¾ðÊó±£ÊäλÅÁȤߤϡ¤ Queue ¤ò»È¤Ã¤Æ¤¤¤ë¥³¡¼¥É¤¬¼ÂÁõ°Í¸¤Ç¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤òÊݾڤǤ¤ë¤Î¤Ç¡¤ ¥½¥Õ¥È¥¦¥§¥¢¤òÉôÉʲ½¤¹¤ëºÝ¤Ë͸ú¤Ç¤¢¤ë¡¥ Î㤨¤Ð¡¤¥¥å¡¼¤òÊ̤Υǡ¼¥¿¹½Â¤¤òÍѤ¤¤Æ¼ÂÁõ¤·¤¿¤¯¤Ê¤Ã¤¿¾ì¹ç¤Ë¤â¡¤ ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤µ¤¨ÊѤï¤é¤Ê¤¤¤è¤¦¤Ëµ¤¤ò¤Ä¤±¤ì¤Ð¡¤ ¥â¥¸¥å¡¼¥ë¤ò»È¤Ã¤Æ¤¤¤ë¥³¡¼¥É¤òµ¤¤Ë¤»¤º¤Ë¼ÂÁõ¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥
¤â¤Ã¤È¤âñ½ã¤Ê ocamlc ¤Î»ÈÍÑË¡¤Ï¡¤Objective Caml ¤ÎÀë¸À¤ò½ñ¤¤¤¿¥Õ¥¡¥¤¥ë(³ÈÄ¥»Ò¤Ï .ml)¤òÍѰդ·¤Æ¡¤ ¥·¥§¥ë¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é
ocamlc -o ⟨ ½ÐÎÏ¥Õ¥¡¥¤¥ë̾ ⟩ ⟨ ¥½¡¼¥¹¥Õ¥¡¥¤¥ë̾ ⟩
¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥é¤ò µ¯Æ°¤¹¤ë¤È¡¤⟨ ½ÐÎÏ¥Õ¥¡¥¤¥ë̾ ⟩ ¤È¤¤¤¦¼Â¹Ô²Äǽ¤Ê¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë¡¥ -o ¥ª¥×¥·¥ç¥ó¤ò¾Êά¤¹¤ë¤È a.out ¤È¤¤¤¦Ì¾Á°¤ÇÀ¸À®¤µ¤ì¤ë¡¥
igarashi@zither:text> cat hello.ml let _ = print_string "Hello, World!\n" igarashi@zither:text> ocamlc hello.ml igarashi@zither:text> a.out Hello, World! igarashi@zither:text> cat fact.ml let rec fact n = if n = 0 then 1 else n * fact (n - 1) let _ = print_int (fact 10) igarashi@zither:text> ocamlc -o fact10 fact.ml igarashi@zither:text> ./fact10 3628800igarashi@zither:text>
¥Ð¥Ã¥Á¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ë¤ÏÀë¸À¤ÎʤӤÀ¤±¤¬µö¤µ¤ì¡¤ ¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¥³¥ó¥Ñ¥¤¥é¤Ç¸«¤¿¤è¤¦¤Ê¡¤¼°¤À¤±¤«¤é¤Ê¤ë¤â¤Î¤Ï ¤Ï¤¸¤«¤ì¤ë¤Î¤Ç¡¤ let _ = ... ¤Î¤è¤¦¤Ê¡¤¼°¤òɾ²Á¤·¤Æ·ë²Ì¤ò¼Î¤Æ¤ëÀë¸À¤È¤·¤Æµ½Ò¤·¤Æ¤¤¤ë¡¥ (C ¤Î main ´Ø¿ô¤ËÁêÅö¤¹¤ë¤â¤Î¤¬¤Ê¤¯¡¤¤¿¤Àñ¤Ë¾å¤«¤éɾ²Á¤ò¹Ô¤Ã¤Æ¤¤¤¯¡¥) ¤Þ¤¿¡¤.ml ¤ËÂбþ¤¹¤ë .mli ¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤Ï¡¤ ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë½¾¤Ã¤Æ¼ÂÁõ¤¬¤µ¤ì¤Æ¤¤¤ë¤«¤Î¸¡ºº¤Ê¤É¤â¹Ô¤ï¤ì¤ë¡¥
¤µ¤Æ¡¤ºÇ½é¤Ë½Ò¤Ù¤¿¤è¤¦¤Ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ÏÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤¹¤ë¤³¤È¤¬ ¤Ç¤¤ë¡¥Objective Caml ¥·¥¹¥Æ¥à¤Ç¤Ï¡¤°ì¤Ä°ì¤Ä¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¥â¥¸¥å¡¼¥ë¤Ë Âбþ¤·¡¤UNIX ¾å¤Ç¤Î¥Õ¥¡¥¤¥ë̾¤ÎÀèÆ¬¤òÂçʸ»ú¤Ë¤·¤¿¤â¤Î¤¬¡¤Objective Caml ¤Ç¤Î ¥â¥¸¥å¡¼¥ë̾¤Ë¤Ê¤ë¡¥Î㤨¤Ð¡¤ foo.ml ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ëÃæ¤ÎÀë¸À¤Ï¡¤Â¾¤Î¥Õ¥¡¥¤¥ë¤«¤é¤Ï¡¤¥â¥¸¥å¡¼¥ë Foo ¤Ë¤¢¤ë¤â¤Î¤È¤·¤Æ¥¢¥¯¥»¥¹¤µ¤ì¤ë¡¥²¼¤Ï¡¤fact.ml ¤È main.ml ¤Ç¤¢¤ë¡¥
igarashi@zither:samples> cat fact.ml let rec fact n = if n = 0 then 1 else n * fact (n - 1) igarashi@zither:samples> cat main.ml (* main.ml *) let _ = print_int (Fact.fact 10); print_newline();
main.ml ¤Ç¤Ï Fact ¥â¥¸¥å¡¼¥ëÆâ¤Î fact ´Ø¿ô¤ò Fact.fact ¤È¤¤¤¦ ̾Á°¤Ç»ÈÍѤ·¤Æ¤¤¤ë¡¥¥³¥ó¥Ñ¥¤¥é¤Ë¤Ï¡¤Æó¤Ä¤Î¥Õ¥¡¥¤¥ë̾¤ò¡¤ °Í¸¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤«¤é½ç¤Ëʤ٤롥
igarashi@zither:samples> ocamlc -o fact10 fact.ml main.ml igarashi@zither:samples> fact10 3628800
¤Þ¤¿¡¤-c ¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¤È¡¤³Æ¥â¥¸¥å¡¼¥ë¤ò¸ÄÊ̤˥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³ ¤È¤¬¤Ç¤¤ë¡¥Ãæ´ÖŪ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È¤·¤Æ¡¤.cmi ¤È¤¤¤¦³ÈÄ¥»Ò¤ò »ý¤Ä¡¤¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¾ðÊó(¥â¥¸¥å¡¼¥ëÆâ¤Ë¤É¤ó¤Ê̾Á°¤Î´Ø¿ô ¤¬¤É¤ó¤Ê·¿¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤ë¤«¤Î¾ðÊ󡦥·¥°¥Í¥Á¥ã¤È¤â¸Æ¤Ö)¤ò¥³¥ó¥Ñ¥¤¥ë¤· ¤¿¥Õ¥¡¥¤¥ë¤È¡¤.cmo ¤È¤¤¤¦³ÈÄ¥»Ò¤ò»ý¤Ä¥â¥¸¥å¡¼¥ë¼«ÂΤò¥³¥ó¥Ñ¥¤¥ë¤·¤¿ ¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë¡¥.cmi ¥Õ¥¡¥¤¥ë¤Ï¡¤¤½¤Î¥â¥¸¥å¡¼¥ë¤ò»ÈÍѤ¹¤ë¥Õ¥¡ ¥¤¥ë¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¤È¤¤ËɬÍפǤ¢¤ê¡¤(.cmo ¼«ÂΤÏɬÍפǤϤʤ¤¡¥) ²¼¤ÎÎã¤Ç¡¤main.ml ¤òÀè¤Ë¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥(¤Þ¤¿¡¤¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÄêµÁ¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¤¤½¤ì¤òÀè¤Ë¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¡¥)¤½¤·¤Æ¡¤.cmo ¤Ï¤¢¤È¤Ç¥ê¥ó¥¯¤·¤Æ¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥
igarashi@zither:samples> ocamlc -c fact.ml igarashi@zither:samples> ocamlc -c main.ml igarashi@zither:samples> ocamlc -o fact10 fact.cmo main.cmo
³Æ¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï -i ¥ª¥×¥·¥ç¥ó¤Çɸ½à½ÐÎϤ˽ñ¤½Ð¤¹¤³¤È¤¬¤Ç ¤¤ë¡¥
igarashi@zither:samples> ocamlc -i -c fact.ml val fact : int -> int
¥×¥í¥°¥é¥Þ¤Ï¤³¤ì¤ò¸«¤Æ¡¤³Æ´Ø¿ô¤Ë°Õ¿ÞÄ̤ê¤Î·¿¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò ³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥