Ê̤ËÇÛÉÛ¤¹¤ë¥Æ¥¥¹¥È¤ò»²¾È¤Î¤³¤È¡¥°Ê²¼¤Ï¡¤¥Æ¥¥¹¥È¤«¤é¤Î Objective Caml ¸À¸ì¤Ë´Ø¤¹¤ëµ½Ò¤Î°ìÉôÈ´¿è¤Ç¤¢¤ë¡¥
¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì ML ¤Ï¡¤¸µ¡¹¤Ï·×»»µ¡¤Ë¤è¤ë¾ÚÌÀ»Ù±ç·Ï¤«¤éȯŸ ¤·¤Æ¤¤¿¸À¸ì1 ¤Ç¡¤´Ø¿ô·¿¥×¥í¥°¥é¥ß¥ó¥°¤È¸Æ¤Ð¤ì¤ë¥×¥í¥°¥é¥ß¥ó¥°¥¹¥¿¥¤¥ë¤ò¥µ¥Ý¡¼¥È¤·¤Æ ¤¤¤ë¡¥ML¤Ï³Ë¤È¤Ê¤ëÉôʬ¤¬¾®¤µ¤¯¥·¥ó¥×¥ë¤Ç¤¢¤ë¤¿¤á¡¤¥×¥í¥°¥é¥ß¥ó¥°½é¿´¼Ô ¸þ¤±¤Î¶µ°éÍѤËŬ¤·¤¿¸À¸ì¤Ç¤¢¤ë¡¥¤ÈƱ»þ¤Ë¡¤Â絬ÌϤʥ¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¤Î ¤¿¤á¤Î¥µ¥Ý¡¼¥È(¥â¥¸¥å¡¼¥ë¥·¥¹¥Æ¥à¡¦¥é¥¤¥Ö¥é¥ê)¤¬½¼¼Â¤·¤Æ¤¤¤ë¡¥ML¤Î³Ë¸À ¸ì¤Ï·¿ÉÕ¤λ·×»»¤È¸Æ¤Ð¤ì¤ë¡¤·Á¼°Åª¤Ê·×»»¥â¥Ç¥ë¤Ë´ð¤Å¤¤¤Æ¤¤¤ë¡¥ ¤³¤Î¤³¤È¤Ï¡¤¸À¸ì»ÅÍͤò·Á¼°Åª¤Ë(¿ô³ØÅª¤Ê¸·Ì©¤Ê³µÇ°¤òÍѤ¤¤Æ)ÄêµÁ¤·¡¤¤½¤Î À¼Á¤ò¸·Ì©¤Ë¡Ö¾ÚÌÀ¡×¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Æ¤¤¤ë¡¥¼ÂºÝ¡¤Standard ML ¤È¤¤¤¦ ¸À¸ì»ÅÍÍ[]¤Ë¤ª¤¤¤Æ¤Ï¡¤(¥³¥ó¥Ñ¥¤¥é¤Î¼õÍý¤¹¤ë)Àµ¤·¤¤¥×¥í¥°¥é ¥à¤Ï·è¤·¤ÆÌ¤ÄêµÁ¤Îưºî¤ò¤ª¤³¤µ¤Ê¤¤¡¤¤È¤¤¤Ã¤¿À¼Á¤¬¾ÚÌÀ¤µ¤ì¤Æ¤¤¤ë¡¥
¤³¤Î¼Â¸³µÚ±é½¬¤Ç³Ø¤Ö¤Î¤Ï ML ¤ÎÊý¸À¤Ç¤¢¤ë Objective Caml ¤È¤¤¤¦¸À¸ì¤Ç¤¢¤ë¡¥ Objective Caml ¤Ï INRIA ¤È¤¤¤¦¥Õ¥é¥ó¥¹¤Î¹ñΩ¤Î·×»»µ¡²Ê³Ø¤Î¸¦µæ½ê¤Ç¥Ç¥¶¥¤¥ó¡¦³« ȯ¤µ¤ì¤¿¸À¸ì¤Ç¡¤Standard ML ¤È¤ÏʸˡŪ¤Ë¤Ï°ã¤Ã¤¿¸À¸ì¤Ç¤¢¤ë¤¬¡¤¤Û¤È¤ó¤É ¤Îµ¡Ç½¤Ï¶¦Í¤·¤Æ¤¤¤ë¡¥¤Þ¤¿¡¤OCaml ¤Ç¤Ï Standard ML ¤Ë¤Ï¸«¤é¤ì¤Ê¤¤¡¤ÆÈ ¼«¤Î³ÈÄ¥¤¬Â¿¤¯»Ü¤µ¤ì¤Æ¤ª¤ê¡¤´Ø¿ô·¿¥×¥í¥°¥é¥ß¥ó¥°¤À¤±¤Ç¤Ê¤¯¡¤¥ª¥Ö¥¸¥§¥¯ ¥È»Ø¸þ¥×¥í¥°¥é¥ß¥ó¥°¤â¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡¥¤Þ¤¿¥³¥ó¥Ñ¥¤¥é¤â¸úΨŪ¤Ê¥³¡¼ ¥É¤òÀ¸À®¤¹¤ëÍ¥¤ì¤¿¤â¤Î¤¬³«È¯¤µ¤ì¤Æ¤¤¤ë¡¥
Objective Caml ¸À¸ì¤Î³µÍפò¥×¥í¥°¥é¥àÎã¤òº®¤¸¤¨¤Æ¾Ò²ð¤¹¤ë¡¥¤³¤ì¤Ï Objective Caml ¤È¤¤¤¦¸À¸ì ¼«ÂΤÎÀâÌÀ¤À¤±¤Ç¤Ê¤¯¡¤¤³¤Î¼Â¸³¤ÇºîÀ®¤¹¤ë½èÍý·Ï¤ÎưºîÎã¤Ë¤â¤Ê¤Ã¤Æ¤¤¤ë¡¥
(define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) (fact 5)¤ÈÆþÎϤ¹¤ë¤È¡¤³¬¾è´Ø¿ô fact ¤¬ÄêµÁ¤µ¤ì¤Æ¡¤¼¡¤Î¼°¤ÎÆþÎϤˤè¤ê 120 ¤¬Ê֤äƤ¯¤ë¤¬¡¤Objective Caml¤Ç¤Ï°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¡¥
let rec fact n = if n = 0 then 1 else n * fact (n-1);; fact 5;;²¿¤È¤Ê¤¯Âбþ´Ø·¸¤¬¤ï¤«¤ë¤À¤í¤¦¤«¡¥
let rec sum (f, n) = if n = 0 then f(n) else f(n) + sum (f, n-1);; sum (fact, 5);;¤È¤¹¤ë¤È¡¤0! + 1! + 2! + 3! + 4! + 5! ¤¬·×»»¤µ¤ì¤Æ¡¤154 ¤¬Ê֤äƤ¯¤ë¡¥
let hoge x = x + 1 + "hoge";;¤Ê¤É¤ÈÆþÎϤ¹¤ë¤È¡¤¤½¤Î»þÅÀ¤Ç¡¤hoge ¤ò¸Æ¤Ó½Ð¤·¤Æ¤â¤¤¤Ê¤¤¤Î¤Ë¡¤
This expression has type string but is here used with type int¤Ä¤Þ¤ê¡¤"hoge" ¤È¤¤¤¦Ê¸»úÎ󤬡¤+ ¤È¤¤¤¦À°¿ô¤ò´üÂÔ¤·¤Æ¤¤¤ë±é»»»Ò¤Î °ú¿ô¤È¤·¤Æ»È¤ï¤ì¤Æ¤¤¤Þ¤¹¤è¡¤¤È¤¤¤¦°ÕÌ£¤Î¥á¥Ã¥»¡¼¥¸(¤³¤³¤Ç¤Ï¥·¥¹¥Æ¥à¤« ¤é¤ÎÊÖÅú¤òɽ¤¹¤¿¤á¤Ë¼ÐÂΤò»È¤Ã¤Æ¤¤¤ë)¤È¤È¤â¤Ë¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤¬È¯À¸¤¹ ¤ë¡¥ (¼ÂºÝ¤Ï "hoge"¤Î²¼¤Ë²¼Àþ¤¬¤Ò¤«¤ì¤Æ¡¤ This expression ¤¬¤É¤ì¤Ê ¤Î¤«¤â¶µ¤¨¤Æ¤¯¤ì¤ë¡¥)¤³¤Î¥¨¥é¡¼¤Ï¡¤ hoge ¤ò¸Æ¤Ó½Ð¤·¤Æ¼ÂºÝ¤Ë¤·»»¤¬ ¹Ô¤ï¤ì¤è¤¦¤È¤¹¤ëÁ°¤ËȯÀ¸¤¹¤ë¤Î¤¬¥ß¥½¤Ç¤¢¤ë¡¥¤Þ¤¿¡¤Objective Caml¤Ç¤Ï¡¤·¿¸¡ºº ¤òÄ̲ᤷ¤¿¾ì¹ç¤Ë¤Ï¡¤Ê¸»úÎó¤ÈÀ°¿ô¤Î¤·»»¤Î¤è¤¦¤Ê¥¨¥é¡¼¤¬¼Â¹Ô»þ¤ËȯÀ¸¤· ¤Ê¤¤¤³¤È¤¬¡¤(¿ô³ØÅª¤Ë)Êݾڤµ¤ì¤Æ¤¤¤ë¡¥¤³¤Î¤³¤È¤ò Objective Caml ¤Ï¶¯ ¤¯·¿ÉÕ¤±¤µ¤ì¤¿(strongly typed)¸À¸ì¤Ç¤¢¤ë¡¤¤È¤¤¤¦¡¥
let rec fact n = if n = 0 then 1 else n * fact (n-1);;¤È¤¹¤ë¤È¡¤¥·¥¹¥Æ¥à¤«¤é¤Ï¡¤
val fact : int -> int = <fun>¤È¤¤¤¦È¿±þ¤¬Ê֤äƤ¯¤ë¡¥¤³¤ì¤Ï fact ¤¬À°¿ô(int)¤ò¼õ¤±¼è¤Ã¤Æ¡¤ À°¿ô¤òÊÖ¤¹´Ø¿ô(->)¤À¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¡¥
Objective Caml ¤Ë¤Ï¡¤¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤È¤¤¤¦µ¡Ç½¤¬¤¢¤Ã¤Æ¡¤¥ê¥¹¥È¤Ê¤É ¹½Â¤¤Î¤¢¤ëÃͤËÂФ·¤Æ¡¤¥Ñ¥¿¡¼¥ó¤òÅö¤Æ¤Ï¤á¤Æ¡¤ÃͤΰìÉô¤ò¼è¤ê¤À¤¹¤³¤È ¤¬¤Ç¤¤ë¡¥Objective Caml ¤Ç¤Ï¡¤¥ê¥¹¥È¤ò [] (¶õ¥ê¥¹¥È)¡¤:: (cons) ¤ò»È¤Ã¤Æ¡¤ 1 :: 2 :: 3 :: [] ¤Î¤è¤¦¤Ë½ñ¤¯¤Î¤À¤¬2¡¤À°¿ô¥ê¥¹¥È¤ÎÀèÆ¬2Í×ÁǤޤǤÎϤò·×»» ¤¹¤ë´Ø¿ô sum_of_first_two ¤Ï¡¤¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤ò»È¤¦¤È
let sum_of_first_two l = match l with [] -> 0 | x :: [] -> x | x :: y :: rest -> x + y;; val sum_of_first_two : int list -> int = <fun>
¤È½ñ¤±¤ë¡¥ match ¤Ï´Ø¿ô¤Î°ú¿ô l ¤ËÂФ·¤Æ¡¤[] (¶õ¥ê¥¹¥È¥Ñ¥¿¡¼¥ó)¤ä x::[] (1Í×Áǥѥ¿¡¼¥ó) ¤ä x::y::rest (2Í×Áǰʾå¥Ñ¥¿¡¼¥ó) ¤òÅö¤Æ¤Ï¤á¤Æ¡¤ Åö¤Æ¤Ï¤Þ¤Ã¤¿¤é¡¤ÊÑ¿ô x (¤ä y) ¤ò¥ê¥¹¥È¤ÎÍ×ÁǤȤ·¤Æ¡¤·×»»¤ò¹Ô¤¦¡¥¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤ò»È¤¦¤È¡¤¾ò·ïʬ´ô¤òÊ£ »¨¤ËÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤Ê¤¯¡¤Á´¤Æ¤Î¾ì¹ç¤¬°ìÅ٤˽ñ¤²¼¤»¤ë¤Î¤¬Ì¥ÎϤǤ¢¤ë¡¥ ¤Á¤Ê¤ß¤Ë¡¤·¿¤Ë¸½¤ì¤ë -> ¤Îº¸Â¦¤Î int list¤ÏÀ°¿ô¤¬Ê¤ó¤À¥ê¥¹¥È ¤¬°ú ¿ô¤È¤·¤Æ¤È¤ì¤ë¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¡¥
let rec length list = match list with [] -> 0 | x::rest -> 1 + length rest;;¤³¤ì¤Ï¡¤À°¿ô¤Î¥ê¥¹¥È¤Ë»È¤¦¤³¤È¤â¤Ç¤¤ë¤·¡¤Ê¸»úÎó¤Î¥ê¥¹¥È¤Ë»È¤¦¤³¤È¤â¤Ç¤¤ë¡¥
length (2::3::4::[]);; - : int = 3 length ("hoge"::"foo"::"bar"::"baz"::[]);; - : int = 4¤Ä¤Þ¤ê¡¤¤Ò¤È¤Ä¤Î´Ø¿ô length ¤ò¡¤¡ÖÀ°¿ô¥ê¥¹¥È¤ò¼õ¤±¤È¤Ã¤ÆÀ°¿ô¤òÊÖ¤¹¡× ´Ø¿ô¤ä¡Öʸ»úÎó¥ê¥¹¥È¤ò¼õ¤±¤È¤Ã¤ÆÀ°¿ô¤òÊÖ¤¹¡×´Ø¿ô¤È¤¤¤¦Ê̤η¿¤Î¤â¤Î¤È¤·¤Æ »È¤¨¤ë¡¥¥½¡¼¥Æ¥£¥ó¥°´Ø¿ô¤Ê¤É¤â¡¤À°¿ô¤Î¥½¡¼¥Æ¥£¥ó¥°¡¤Ê¸»úÎó¤Î¥½¡¼¥Æ¥£¥ó¥°¤Ê¤É °Û¤Ê¤ë¼ïÎà¤Î¥Ç¡¼¥¿¤ËÂФ¹¤ë¥½¡¼¥Æ¥£¥ó¥°¤ò¡¤¤Ò¤È¤Ä¤ÎÄêµÁ¤Çµ½Ò¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥ ¤³¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥ß¥ó¥°¤ò¡¤·¿¤¬Â¿ÁêŪ¤Ç¤Ê¤¤ C ¸À¸ì¤Ê¤É¤Ç(°ÂÁ´À¤ò»¤Ê¤ï¤Ê¤¤¤Ç)¹Ô¤¦¤Î¤ÏÆñ¤·¤¤¡¥