Previous Up

Chapter 8  Ã±½ã¤Ê¥â¥¸¥å¡¼¥ë¤È¥Ð¥Ã¥Á¥³¥ó¥Ñ¥¤¥ë

Objective Caml ¤Ç¤Ï¡¤¥Ð¥Ã¥Á¥³¥ó¥Ñ¥¤¥é ocamlc ¤òÍѤ¤¤Æ Objective Caml ¥×¥í¥°¥é¥à¤ò½ñ¤¤¤¿¥Õ¥¡¥¤¥ë¤«¤é¡¤¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥ ¤Þ¤¿¡¤¥×¥í¥°¥é¥à¤òÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤â ¤Ç¤­¤ë¡¥¤³¤Î¤È¤­¡¤Ê¬³ä¤µ¤ì¤¿Ã±°Ì¤ò¥â¥¸¥å¡¼¥ë¤È¸Æ¤Ö¡¥ Objective Caml ¥é¥¤¥Ö¥é¥ê¤â¥â¥¸¥å¡¼¥ë¤Î·Á¤ÇÄ󶡤µ¤ì¤Æ¤ª¤ê¡¤ ¤½¤Î»ÈÍÑÊýË¡¤ÏƱ¤¸¤Ç¤¢¤ë¡¥

8.1  ¥é¥¤¥Ö¥é¥ê¥â¥¸¥å¡¼¥ë¤Î»È¤¤Êý

¤Þ¤º¤Ï¡¤¥é¥¤¥Ö¥é¥ê¤Î»ÈÍÑË¡¤ò³Ø¤Ó¤Ê¤¬¤é¡¤´û¸¤Î¥â¥¸¥å¡¼¥ë¤Î »È¤¤Êý¤ò¤ß¤Æ¤æ¤¯¡¥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 Àë¸À¤Ïʸ»úÄ̤ê¥â¥¸¥å¡¼¥ë¤ò ¡Ö³«¤¯¡×¤â¤Î¤Ç¡¤¥â¥¸¥å¡¼¥ëÆâ¤ÎÄêµÁ¤¬¥â¥¸¥å¡¼¥ë̾¤Ê¤·¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è ¤¦¤Ë¤Ê¤ë¡¥

# open List;;
# length [3; 9; 10];;
- : int = 3

¤³¤Î open Àë¸À¤Ï¡¤open ¤·¤¿»þÅÀ¤Ç¤¹¤Ç¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ëƱ̾¤ÎÄêµÁ¤ò ±£¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¡¤Æ±Ì¾¤ÎÄêµÁ¤òÄ󶡤¹¤ëÊ£¿ô¤Î¥â¥¸¥å¡¼¥ë¤ò³«¤¯¤È¤­¤Ë¤Ï ½çÈÖ¤ËÃí°Õ¤·¤¿Êý¤¬¤è¤¤¡¥±£¤µ¤ì¤Æ¤·¤Þ¤Ã¤¿Ì¾Á°¤Ï¡¤·ë¶É¥â¥¸¥å¡¼¥ë̾¤Ä¤­¤Î µ­Ë¡¤Ç¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡¥

8.2  ¥â¥¸¥å¡¼¥ë¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹

¥é¥¤¥Ö¥é¥ê¡¦¥â¥¸¥å¡¼¥ë¤Ï 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 ¤ò»È¤Ã¤Æ¤¤¤ë¥³¡¼¥É¤¬¼ÂÁõ°Í¸¤Ç¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤òÊݾڤǤ­¤ë¤Î¤Ç¡¤ ¥½¥Õ¥È¥¦¥§¥¢¤òÉôÉʲ½¤¹¤ëºÝ¤ËÍ­¸ú¤Ç¤¢¤ë¡¥ Î㤨¤Ð¡¤¥­¥å¡¼¤òÊ̤Υǡ¼¥¿¹½Â¤¤òÍѤ¤¤Æ¼ÂÁõ¤·¤¿¤¯¤Ê¤Ã¤¿¾ì¹ç¤Ë¤â¡¤ ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤µ¤¨ÊѤï¤é¤Ê¤¤¤è¤¦¤Ëµ¤¤ò¤Ä¤±¤ì¤Ð¡¤ ¥â¥¸¥å¡¼¥ë¤ò»È¤Ã¤Æ¤¤¤ë¥³¡¼¥É¤òµ¤¤Ë¤»¤º¤Ë¼ÂÁõ¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥

8.3  ¥Ð¥Ã¥Á¥³¥ó¥Ñ¥¤¥é¤Ë¤è¤ë¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤ÎÀ¸À®

¤â¤Ã¤È¤âñ½ã¤Ê 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

¥×¥í¥°¥é¥Þ¤Ï¤³¤ì¤ò¸«¤Æ¡¤³Æ´Ø¿ô¤Ë°Õ¿ÞÄ̤ê¤Î·¿¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò ³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥


Previous Up