Objective Caml½èÍý·Ï¤Ë¤Ï2¼ïÎà¤Î¥³¥ó¥Ñ¥¤¥é¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡¥¤Ò¤È¤Ä¤Ï gcc ¤ä javac ¤Ê¤É¤Î¤è¤¦¤Ë¡¤¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤«¤é¼Â¹Ô¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¥Ð¥Ã ¥Á¥³¥ó¥Ñ¥¤¥é ocamlc¡¤¤â¤¦¤Ò¤È¤Ä¤Ï¡¤¥æ¡¼¥¶¤«¤é¤ÎÆþÎϤò¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¤Ë ½èÍý¤¹¤ë ocaml ¤Ç¤¢¤ë¡¥¤³¤Î¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¤Ê½èÍý·Ï¤Ï¡¤(¥æ¡¼¥¶¤«¤é¤Î)¥× ¥í¥°¥é¥à¤ÎÆþÎÏ → ¥³¥ó¥Ñ¥¤¥ë → ¼Â¹Ô¡¦·ë²Ì¤Îɽ¼¨¡¤¤ò ·«¤êÊÖ¤¹¤â¤Î¤Ç1 ¡¤Ä¾Á°¤Ç¼Â¹Ô¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Î·ë²Ì¤¬¼¡¤ÎÆþÎÏ»þ¤ËÈ¿±Ç¤µ¤ì¤ë ¤¿¤á¡¤³«È¯Ãæ¤Î¥Æ¥¹¥È¤Ê¤É¡¤»î¹Ôºø¸í¤òȼ¤¦²áÄø¤ÇÆÃ¤ËÊØÍø¤Ê¤â¤Î¤Ç¤¢¤ë¡¥¤Þ¤¿¡¤ ¸å½Ò¤¹¤ë¤è¤¦¤Ë¡¤ÆþÎϤϥ¡¼¥Ü¡¼¥É¤«¤é¤À¤±¤Ç¤Ê¤¯¡¤¥Õ¥¡¥¤¥ë¤«¤é¤ÎÆÉ¤ß¹þ¤ß¤â¤Ç¤ ¤ë¤Î¤Ç¡¤Ëè²ó¥×¥í¥°¥é¥à¤òºÇ½é¤«¤éÂǤ¿¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¤Ê¤É¤ÎÉÔÊØ¤â¤Ê¤¤¡¥
;Ã̤Ǥ¢¤ë¤¬¡¤´Ø¿ô·¿¸À¸ì½èÍý·Ï¤Ë¤Ï¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¤Ê½èÍý·Ï¤¬ÍѰդµ¤ì¤Æ ¤¤¤ë¤â¤Î¤¬Â¿¤¤¤è¤¦¤À¡¥
¤³¤Î±é½¬¤Ç¤Ï¡¤¤Þ¤º ocaml ¤ÎÊý¤òÍѤ¤¤Æ¿Ê¤á¤Æ¤¤¤¯¡¥
µ¯Æ°ÊýË¡¤ÏEmacs ¤Ç M-x tuareg-run-caml (M-x ¤Ï¥¨¥¹¥±¡¼¥×¥¡¼¤Ë³¤¤¤Æ x ¤ò¥¿¥¤¥×¤¹¤ë) ¤È¤¹¤ë(¸å½Ò¤¹¤ë Tuareg mode ¤Î¥Ð¥Ã¥Õ¥¡¤«¤é¤Ï C-c C-s ¤Çµ¯Æ°¤Ç¤¤ë)¡¥ ¥ß¥Ë¥Ð¥Ã¥Õ¥¡(²èÌ̤κDz¼ÃÊ)¤Ë Caml toplevel to run: ¤È¤¤¤¦¥×¥í¥ó¥×¥È¤È ¤È¤â¤Ë¡¤µ¯Æ°¤¹¤ë¥³¥Þ¥ó¥É¤òʹ¤«¤ì¤ë¤¬(´û¤Ë ocaml ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Î ǧ¤·)¡¤¤½¤Î¤Þ¤Þ Enter ¥¡¼¤ò¥¿¥¤¥×¤¹¤ë¡¥¤¹¤ë¤È¡¤°Ê²¼¤Î¤è¤¦¤ÊÆâÍÆ¤Î¿·¤· ¤¤¥Ð¥Ã¥Õ¥¡¤¬¸½¤ï¤ì¤ë¡¥
Objective Caml version 3.08.1 #
# ¤Ï¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¥³¥ó¥Ñ¥¤¥é¤ÎÆþÎÏ¥×¥í¥ó¥×¥È¤Ç¤¢¤ë¡¥
¤µ¤Æ¡¤¥×¥í¥ó¥×¥È¤Ë³¤¤¤Æ¡¤´Êñ¤Ê¼°¤òÆþÎϤ·¤Æ¤ß¤è¤¦¡¥
# 1 + 1;; - : int = 2
¤³¤Î¥Æ¥¥¹¥È¤Ç¤Ï¡¤¥æ¡¼¥¶¤ÎÆþÎϤò¹ÔƬ¤Ë#¤ò¤Ä¤±¡¤¥¿¥¤¥×¥é¥¤¥¿¡¼ÂÎ (abc)¤Ç¡¤¥³¥ó¥Ñ¥¤¥é¤«¤é¤Î½ÐÎϤò¥¿¥¤¥×¥é¥¤¥¿¡¼¼ÐÂÎ (abc)¤Ç¼¨¤¹¡¥ºÇ¸å¤Î ;; ¤ÏÆþÎϽªÎ»¤Î¤·¤ë¤·¤Ç¡¤¥×¥í¥ó¥× ¥È¤«¤é¤³¤³¤Þ¤Ç¤ÎÉôʬ¤¬¥³¥ó¥Ñ¥¤¥ë¡¦¼Â¹Ô¤µ¤ì¤ë¡¥(ÅÓÃæ¤Ë²þ¹Ô¤¬¤¢¤Ã¤Æ¤â¤è¤¤¡¥) ¥³¥ó¥Ñ¥¤¥é¤Î½ÐÎϤϡ¤É¾²Á·ë²Ì¤Ë¤Ä¤±¤é¤ì¤¿Ì¾Á°(¤³¤³¤Ç¤Ï¼°¤À¤±¤òÆþÎϤ·¤¿¤Î¤Ç¡¤ ̾Á°¤ò¤Ä¤±¤Æ¤¤¤Ê¤¤¤È¤¤¤¦°ÕÌ£¤Ç¤¢¤ë -)¡¤¼°¤ª¤è¤Óɾ²Á·ë²Ì¤Î·¿ (int)¡¤É¾²Á·ë²Ì(2)¤«¤é¤Ê¤Ã¤Æ¤¤¤ë¡¥
Ê£»¨¤Ê¼°¤Ï¡¤()¤Ç°Ï¤à¤³¤È¤Ç¡¤Éôʬ¼°¤Î¹½Â¤¤ò¼¨¤¹¤³¤È¤¬¤Ç¤¤ë¡¥¤Þ¤¿¡¤Â¿¤¯¤Î ±é»»¤Ë¤Ï¾ï¼±Åª¤Ê·ë¹ç¤Î¶¯¤µ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Æ¡¤()¤ò¾Êά¤Ç¤¤ë¡¥
# 1 + 2 * 3;; - : int = 7 # (1 + 2) * 3;; - : int = 9
¤Þ¤¿¡¤ÆþÎÏÃæ ;; ¤òÆþÎϤ¹¤ëÁ°¤Ë Control-C ¤ò2²ó³¤±¤ÆÆþÎϤ¹¤ë¤³¤È¤Ç ¥³¥ó¥Ñ¥¤¥ë¤»¤º¡¤¥×¥í¥ó¥×¥È¤ËÌá¤ë¤³¤È¤¬¤Ç¤¤ë¡¥
¤³¤Î¥Ð¥Ã¥Õ¥¡¤Ç¤Ï¼°¤ÎÆþÎϤò½õ¤±¤ë¥³¥Þ¥ó¥É¤¬¤¤¤¯¤Ä¤«ÍѰդµ¤ì¤Æ¤ª¤ê¡¤ Î㤨¤Ð M-p, M-n ¤Ç°ÊÁ°¤ËÆþÎϤ·¤¿¼°¤ò¸Æ¤Ó½Ð¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥ (ɽ2.1¤Ë¥¡¼¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤ò¤Þ¤È¤á¤Æ¤¢¤ë¡¥)
Table 2.1: ¥³¥ó¥Ñ¥¤¥é¥Ð¥Ã¥Õ¥¡(Tuareg Interactive mode)Æâ¥¡¼¥Ð¥¤¥ó¥Ç¥£¥ó¥°
C-c C-c ÆþÎÏÅÓÃæ¤ÇÃæÃǤ·¥×¥í¥ó¥×¥È¤ËÌá¤ë C-c TAB Caml¤Ë³ä¤ê¹þ¤ß¤òÆþ¤ì¤ë C-c C-k Caml¤ò½ªÎ» M-p ²áµî¤ËÆþÎϤ·¤¿¼°¤ÎÍúÎò¤òÁ̤ë M-n ²áµî¤ËÆþÎϤ·¤¿¼°¤ÎÍúÎò¤ò¿·¤·¤¤Êý¤ØÃ©¤ë
¤µ¤Æ¡¤¤¤¤¯¤Ä¤«¸í¤Ã¤¿ÆþÎÏÎã¤Ë¤Ä¤¤¤Æ¤â¤ß¤Æ¤¤¤³¤¦¡¥
# 2 + 3 - ;; 2 + 3 - ;; ^^ Syntax error # 5 + "abc";; 5 + "abc";; ^^^^^ This expression has type string but is here used with type int # 4 / 0;; Exception: Division_by_zero.
(üËö¾å¤Ç¤Ï²¼Àþ¤Ç¼¨¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡¥) 1ÈÖÌÜ¤ÎÆþÎϤϡ¤¤¤¤ï¤æ¤ëʸˡ¥¨¥é¡¼¤Ç¤¢¤ë¡¥¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ï¤«¤Ê¤ê¤¢¤Ã¤µ¤ê¤· ¤Æ¤¤¤Æ¡¤C ¤ä Java ¥³¥ó¥Ñ¥¤¥é¤ËÈæ¤Ù¤Æ¤ä¤ä(¤«¤Ê¤ê?)ÉÔ¿ÆÀڤǤ¢¤ë¡¥2ÈÖÌܤϡ¤ÆþÎϤµ¤ì¤¿¼°¤Î¹½À®¼«ÂΤÏʸˡ¤Ë±è¤Ã¤Æ¤¤¤ë¤â¤Î¤Î¡¤·¿¥Á¥§¥Ã¥¯(typechecking) ¤òÄ̤é¤Ê¤«¤Ã¤¿¤³¤È¤ò¼¨¤¹¡¥Objective Caml ¤Ç¤Ï¡¤+ ¤ÎξÊդϡ¤À°¿ô¤Ëɾ²Á¤µ¤ì¤ë¼°¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡¥¤·¤«¤·¡¤ ¤³¤³¤Ç¤Ï "abc" ¤È¤¤¤¦Ê¸»úÎó¤ò²Ã¤¨¤è¤¦¤È¤·¤Æ¤¤¤ë¤¿¤á¥¨¥é¡¼¤È¤Ê¤Ã¤Æ¤¤¤ë¡¥¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ï¡¤ ¡Ö²¼ÀþÉô(¥¨¥é¡¼¤ÎȯÀ¸¤·¤¿¸Ä½ê)¤Ïʸ»úÎó·¿(string)¤Î¼°¤Ç¤¢¤ë¤Î¤Ë¡¤ À°¿ô·¿(int)¤¬É¬ÍפʸĽê(¤Ä¤Þ¤ê +¤Î±¦Â¦)¤Ç»È¤ï¤ì¤Æ¤¤¤ë¡×¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¡¥ ·¿(type)¤ä·¿¥Á¥§¥Ã¥¯¤Ï Objective Caml ¤Ç¤ÏÈó¾ï¤Ë½ÅÍפʳµÇ°¤Ç¡¤±é½¬¤òÄ̤·¤Æ¾Ü ¤·¤¯³Ø¤ó¤Ç¤¤¤¯¤³¤È¤Ë¤Ê¤ë¡¥ºÇ¸å¤ÎÎã¤Ç¤Ï¡¤¼°¤Ï·¿¥Á¥§¥Ã¥¯¤âÄ̤äƤ¤¤ë¤¬¡¤¥³¥ó ¥Ñ¥¤¥ë¸å¤Î¼Â¹ÔÃæ¤ËÎã³°(exception)—¤³¤³¤Ç¤Ï0¤Ç¤Î½ü»»—¤¬È¯À¸¤· ¤¿¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¡¥Îã³°¤Ë¤Ä¤¤¤Æ¤â¾Ü¤·¤¯³Ø¤Ö¤¬¡¤¤³¤³¤Ç¤Ï¤È¤ê¤¢¤¨¤º¼Â¹Ô»þ¤Î ¥¨¥é¡¼¤ÎȯÀ¸¤À¤È»×¤Ã¤Æ¤¤¤ì¤Ð¤è¤¤¡¥
½ªÎ»¤Ï¥×¥í¥ó¥×¥È¤Î½Ð¤Æ¤¤¤ë¾õÂÖ¤Ç C-c C-d ¤ò¡¤¤â¤·¤¯¤Ï #quit;; ¤ÈÆþÎϤ¹ ¤ë¤³¤È¤Ç¹Ô¤¦¡¥
Objective Caml version 3.08.3 # #quit;; Process inferior-caml finished
ocaml Æâ¤Ç¤Ï¡¤¥³¥ó¥Ñ¥¤¥é¤Îưºî¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¸Æ¤Ð¤ì¤ë¤¤¤¯¤Ä¤«¤ÎÌ¿Îá¤¬ÍøÍѤǤ¤ë¡¥¤¿¤È¤¨¤Ð¡¤¾å¤Ç¤Ç¤Æ¤¤¿ #quit ¤â¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ì¼ï¤Ç¤¢¤ë¡¥¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¿¿ô¤¢¤ë¤¬ ¤³¤³¤Ç¤Ï¥Õ¥¡¥¤¥ë¤«¤é¤Î¥×¥í¥°¥é¥àÆÉ¤ß¹þ¤ß¤Ë´Ø¤¹¤ë¤Õ¤¿¤Ä #use, #cd ¤ò¾Ò²ð¤¹¤ë¡¥¾Ü¤·¤¯¤Ï¥Þ¥Ë¥å¥¢¥ë[]¤ò»²¾È¤Î¤³¤È¡¥
#use ¤Ï¥Õ¥¡¥¤¥ë̾¤ò°ú¿ô¤Ë¤È¤Ã¤Æ¡¤¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤òÆþÎϤȤ·¤Æ¥³¥ó¥Ñ¥¤¥ë¤ò ¹Ô¤¦¡¥
1 + 1;;
Objective Caml version 3.08.3 # #use "two.ml";; - : int = 2
¤Á¤Ê¤ß¤Ë¡¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¸À¸ì¤Î¼°¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¤ ¼°¤Î°ìÉô¤ËËä¤á¹þ¤ó¤Ç»È¤¦¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥
# 1 + #use "two.ml";; 1 + #use "two.ml";; ^ Syntax error
#cd ¤Ï¡¤#use ¤ÈƱÍͤËʸ»úÎó¤ò°ú¿ô¤Ë¤È¤Ã¤Æ¡¤¥·¥§¥ë¤Î cd ¥³¥Þ¥ó¥É¤È ƱÍͤ˥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò°ú¿ô¤Î¤â¤Î¤ØÊѹ¹¤¹¤ë¤â¤Î¤Ç¤¢¤ë¡¥
±é½¬¤Î¥ì¥Ý¡¼¥È¤Ï¡¤¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤òÄó½Ð¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤Î¤Ç¡¤ ¼ç¤ËÊÌ¥Õ¥¡¥¤¥ë¤Ë¥×¥í¥°¥é¥à¤ò½ñ¤¤¤Æ¡¤#use ¤Ç¥³¥ó¥Ñ¥¤¥é¤ËÆÉ¤ß¹þ¤ó¤Ç ¥Æ¥¹¥È¤ò¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡¥¤³¤Î»þ¡¤¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤È¤·¤Æ .ml ¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤à¤È¡¤Tuareg mode ¤È¤¤¤¦ Objective Caml¥×¥í¥°¥é¥à¤Î ÆþÎϤò»Ù±ç¤¹¤ë¥â¡¼¥É¤Ë¤Ê¤ê¡¤¥½¡¼¥¹¤Î¥¤¥ó¥Ç¥ó¥È¤Ê¤É¤¬ ¤Ç¤¤ë¡¥¥³¥Þ¥ó¥É¤Ïɽ2.2¤Ë¤Þ¤È¤á¤Æ¤¢¤ë¡¥
Table 2.2: Tuareg mode ¥¡¼¥Ð¥¤¥ó¥Ç¥£¥ó¥°
TAB ¸½ºß¤Î¹Ô¤Î¥¤¥ó¥Ç¥ó¥È C-c C-p Á°¤Î¥Õ¥ì¡¼¥º(°ÕÌ£¤Î¤¢¤ë¤Þ¤È¤Þ¤ê)¤Ø°Üư C-c C-n ¼¡¤Î¥Õ¥ì¡¼¥º¤Ø°Üư ESC C-h ¥Õ¥ì¡¼¥º¤Ë¥Þ¡¼¥¯ ESC q ¥Õ¥ì¡¼¥º¤ò¥¤¥ó¥Ç¥ó¥È C-c . t try ¼°¤ÎÁÞÆþ C-c . m match ¼°¤ÎÁÞÆþ C-c . l let ¼°¤ÎÁÞÆþ C-c . i if ¼°¤ÎÁÞÆþ C-c . w while ¼°¤ÎÁÞÆþ C-c . f for ¼°¤ÎÁÞÆþ C-c . b begin ¼°¤ÎÁÞÆþ C-c C-s ocaml ¤òµ¯Æ°¡¥µ¯Æ°Ãæ¤Ë¤Ï°Ê²¼¤Î¥³¥Þ¥ó¥É¤¬»ÈÍѲÄǽ C-c C-k ocaml ¤ò½ªÎ» C-c C-b ¥Ð¥Ã¥Õ¥¡¤òɾ²Á(ocaml ¥×¥í¥»¥¹¤ØÁ÷¿®) C-c C-r ÁªÂòÉôʬ¤Îɾ²Á C-c C-e ¥Õ¥ì¡¼¥º¤Îɾ²Á
¥Õ¥¡¥¤¥ë¤Ë¥×¥í¥°¥é¥à¤ò½ñ¤¯¤È¤¤Ï¡¤¥³¥á¥ó¥È¤ò½ñ¤¯¤è¤¦¤Ë¤·¤¿¤¤¡¥ ¥×¥í¥°¥é¥àÃæ¤Î¥³¥á¥ó¥È¤Ï (* ¤È *) ¤Ç°Ï¤Þ¤ì¤¿Éôʬ¤Ç¤¢¤ë¡¥ ¤Þ¤¿¡¤¥³¥á¥ó¥È¤ÏÆþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤â¤è¤¤¤·¡¤ÅÓÃæ¤Ë²þ¹Ô¤ò¤Ï¤µ¤ó¤Ç¤â¤è¤¤¡¥
EUC ¤Ç¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¸Â¤ê¡¤¥³¥á¥ó¥È¡¤Ê¸»úÎóÄê¿ô¤ËÆüËܸì¤òÍѤ¤¤ë¤³ ¤È¤¬¤Ç¤¤ë(¤è¤¦¤Ç¤¢¤ë)¡¥¤·¤«¤·¡¤Ê¸»úÎóÄê¿ô¤Ë´Ø¤·¤Æ¤Ï¡¤¤½¤ÎŤµ¤Ê¤É¤¬ (¥Ð¥¤¥È¿ô¤ò¿ô¤¨¤Æ¤·¤Þ¤¤)Àµ¤·¤¯Ç§¼±¤µ¤ì¤Ê¤¤¤Î¤Ç¡¤¤Ç¤¤ì¤Ð»È¤ï¤Ê¤¤Êý¤¬Ìµ Æñ¤Ç¤¢¤í¤¦¡¥
Objective Caml ¥×¥í¥°¥é¥à¤Ï¼°(expression)¤«¤é¡¤ ¤½¤ì¤¬¼¨¤¹ÃÍ(value)(Î㤨¤Ð¡¤¼° 1 + 2 ¤ÎÃÍ¤Ï 3 ¤Ç¤¢¤ë)¤ò ·×»»¤¹¤ë¤³¤È¤Ç¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤¬¿Ê¤ó¤Ç¹Ô¤¯¡¥¼°¤«¤éÃͤò ·×»»¤¹¤ë²áÄø¤òɾ²Á(evaluation)¤È¤¤¤¦¡¥ ºÇ¤â´Êñ¤Ê¼°¤Ï¡¤À°¿ô¤äʸ»úÎó¤Ê¤É¤Î¡¤´ðËÜŪ¤Ê¥Ç¡¼¥¿Äê¿ô¤Ç¤¢¤ë¡¥¤³¤ì¤é¤Ï ¤½¤ì¼«¿È¤¬ÃͤǤ¢¤ë¡¥ Ê£»¨¤Ê¼°¤Ï´Êñ¤Ê¼°¤òÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¹½À®¤¹¤ë¡¥Î㤨¤Ð¡¤1 + 2 ¤È¤¤¤¦ ¼°¤ÏÆó¤Ä¤ÎÉôʬ¼°(subexpression) 1 ¤È 2 ¤È + ¤È¤¤¤¦ Æó¹à±é»»»Ò¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤ë¡¥
ËܳÊŪ¤Ê¥×¥í¥°¥é¥ß¥ó¥°¤ËÆþ¤ëÁ°¤Ë¡¤Objective Caml ¤Ç»ÈÍѤµ¤ì¤ë´ðËÜŪ¤Ê¥Ç¡¼¥¿(À°¿ô¡¤¼Â ¿ô¡¤Ê¸»úÎó¤Ê¤É)¤È¤½¤ì¤ËÂФ¹¤ë±é»»(²Ã¸º¾è½ü¡¤Ê¸»úÎó¤Î·ë¹ç¤Ê¤É)¤ò¡¤¥Ç¡¼¥¿¤Î·¿ ¤´¤È¤ËÀâÌÀ¤·¡¤Ê£»¨¤Ê¼°¤ò¹½À®¤¹¤ëÊýË¡¤ò¤ß¤Æ¤¤¤¯¡¥
¥á¥¿ÊÑ¿ô¤Ë¤Ä¤¤¤Æ ¥Æ¥¥¹¥È Ãæ¡¤Objective Caml ¼°¤òɽµ¤¹¤ëºÝ¤Ë¡¤ i + j¤Î¤è¤¦¤Ë¡¤¼ÐÂαѾ®Ê¸»ú¤È¥¿¥¤¥×¥é¥¤¥¿ÂΤò º®¤¼¤ÆÉ½µ¤¹¤ë¤³¤È¤¬¤¢¤ë¡¥+ µ¹æ¤¬ Objective Caml ¤Î¼°¤Î°ìÉô¤Îʸ»ú¤Ç¤¢¤ë ¤³¤È¤ËÂФ·¤Æ¡¤i, j ¤Ï(¤³¤Î¥Æ¥¥¹¥È Ãæ¤Ç¤Ï) Ǥ°Õ¤ÎÀ°¿ô¼°¤òɽ¤¹¤¿¤á¤Î¥Æ¥¥¹¥È¾å¤Ç¤Îɽµ¤Ç¤¢¤ë¡¥¤¹¤ë¤È¡¤Î㤨¤Ð Objective Caml ¼° 1 + 2 ¤Ï i ¤ò 1, j ¤ò 2¤È¹Í¤¨¤¿¾ì¹ç¤ÎÎã¤È¹Í¤¨ ¤ë¤³¤È¤Ë¤Ê¤ë¡¥¤³¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ÎÀ¤³¦¤Î³°¤Ç¤Îɽµ¤Î¤¿¤á¤ÎÊÑ¿ô¤ò ¥á¥¿ÊÑ¿ô(metavariable)¤È¸Æ¤Ö¡¥¥×¥í¥°¥é¥à¤ËÍѤ¤¤é¤ì¤ëÊÑ¿ô (¥×¥í¥°¥é¥àÊÑ¿ô)¤Èº®Æ±¤·¤Ê¤¤¤è¤¦¤Ëµ¤¤ò¤Ä¤±¤¿¤¤¡¥ÆÃ¤Ë¡¤¥×¥í¥°¥é¥àÊÑ¿ô ¤Î¤¿¤á¤Î¥á¥¿ÊÑ¿ô¤òÍѤ¤¤ë¾ì¹ç¤Ë¤ÏÃí°Õ¤¬É¬ÍפǤ¢¤ë¡¥Î㤨¤Ð¡¤¥Æ¥¥¹¥ÈÃæ ¤Ç x, y ¤Ê¤É¤ò¥×¥í¥°¥é¥àÊÑ¿ô¤Î¤¿¤á¤Î¥á¥¿ÊÑ¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë¤¬¡¤ x + 1¤È½ñ¤¤¤¿¤È¤¤Ë¤Ï¡¤a + 1, pi + 1, hoge + 1, x + 1 ¤Ê ¤É¡¤a, pi, hoge, x ¤È¤¤¤¦¶ñÂÎŪ¤ÊÊÑ¿ô¤ò»È¤Ã¤¿Ç¤°Õ¤Î¼°¤òɽ¤ï¤· ¤Æ¤¤¤ë¡¥
unit¤Ï¡¤() (unit value ¤È¸Æ¤Ö) ¤È¤¤¤¦Ãͤò¤¿¤À¤Ò¤È¤Ä¤Î Í×ÁǤȤ·¤Æ´Þ¤à¤è¤¦¤Ê·¿¤Ç¤¢¤ë¡¥
# ();; - : unit = ()
¤³¤ÎÃͤËÂФ·¤Æ¹Ô¤¨¤ë±é»»¤Ï¤Ê¤¯¡¤Ìò¤ËΩ¤¿¤Ê¤¤¤â¤Î¤Ë»×¤¨¤ë¤«¤â¤·¤ì¤Ê¤¤¡¥ ŵ·¿Åª¤Ê»ÈÍÑË¡¤Ë¤Ï¤Õ¤¿¤Ä¤¢¤ë¡¥¤Ò¤È¤Ä¤Ï¡¤ÊÖ¤êÃͤ˰ÕÌ£¤¬¤Ê¤¤¤è¤¦¤Ê¡¤Î㤨¤Ð ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤ß¤ò¹Ô¤Ê¤¦¤À¤±¤Î¼°¤Ï¡¤unit·¿¤ò»ý¤Ä¡¥ ¤½¤Î°ÕÌ£¤Ç¡¤C ¤Ê¤É¤Ë¤ª¤±¤ë void ·¿¤È»÷¤Æ¤¤¤ë2¡¥ ¤Þ¤¿¡¤¤â¤¦¤Ò¤È¤Ä¤Ï¡¤(°ÕÌ£¤Î¤¢¤ë)°ú¿ô¤ÎÍפé¤Ê¤¤¼ê³¤¤Ï unit·¿¤Î°ú¿ô¤ò¼è¤ë´Ø¿ô¤È¤·¤ÆÉ½¤µ¤ì¤ë¡¥
¤¤¤ï¤æ¤ëÀ°¿ô¡¤…, −2, −1, 0, 1, 2, … ¤Î·¿¤Ç¤¢¤ë¡¥»»½Ñ±é»»¤È¤·¤Æ »Í§±é»» +, -, *, /, ¾ê;¤òµá¤á¤ë mod ¤Ê¤É¤¬¡¤¤Þ¤¿¡¤¥Ó¥Ã¥È±é»»¤È ¤·¤Æ¼¡¤Î¤è¤¦¤Ê¤â¤Î¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡¥
(ÉâÆ°¾®¿ôÅÀɽ¸½¤Î)¼Â¿ô¤Î·¿¤Ç¤¢¤ë¡¥3.1415 ¤Ê¤É¤Î¾®¿ôÅÀɽ¸½¤È 31.415e-1 ¤Ê¤É¤Î10¤ò´ðÄì¤È¤¹¤ë»Ø¿ôɽ¸½ (= 31.415 × 10−1) ¤¬ »ÈÍѤǤ¤ë¡¥¤Þ¤¿¡¤¾®¿ôÅÀ¤ÎÁ°¤Î0¤Ï¾Êά¤Ç¤¤Ê¤¤¡¥
Àè½Ò¤Î»Í§±é»»µ¹æ¤ÏÉâÆ°¾®¿ôÅÀ¤ËÂФ·¤ÆÍѤ¤¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥¤½¤ÎÂå¤ê¤Ë ¾®¿ôÅÀ¤ò¤Ä¤±¤¿ +., -., *., /. ¤ò»È¤¦¡¥¤Þ¤¿¡¤µÕ¤ËÀ°¿ô¤ò ¡Ö¤½¤Î¤Þ¤Þ¡×¼Â¿ô¤È¤ß¤Ê¤·¡¤+. ¤Ê¤É¤ò»È¤¦¤³¤È¤â¤Ç¤¤Ê¤¤¡¥ À°¿ô/¼Â¿ô´Ö¤ÎÊÑ´¹¤Ë¤Ï int_of_float, float_of_int ¤È¤¤¤¦´Ø¿ô¤¬ ÍѰդµ¤ì¤Æ¤¤¤ë¡¥(¤Ä¤Þ¤ê¡¤C ¸À¸ì¤Ê¤É¤Î¤è¤¦¤Ë°ÅÌۤη¿ÊÑ´¹¤Ï¸ºß¤·¤Ê¤¤¡¥)
# 2.1 +. 5.9;; - : float = 8. # 1 +. 3.4;; 1 +. 3.4;; ^ This expression has type int but is here used with type float # float_of_int(1) +. 3.4;; - : float = 4.4 # float_of_int 1 +. 3.4;; - : float = 4.4 # 1 + (int_of_float 3.4);; - : int = 4
´Ø¿ô¤Î°ú¿ô¤Î¤Þ¤ï¤ê¤Î () ¤Ï¾Êά²Äǽ¤Ç¤¢¤ë¡¥¾Êά²Äǽ¡¤¤È¤¤¤¦¤è¤ê¡¤¤½¤â ¤½¤â´Ø¿ôŬÍѤÎʸˡ¤È³ç¸Ì¤Ï´Ø·¸¤¬¤Ê¤¯¡¤³ç¸Ì¤Ï¤¢¤¯¤Þ¤Ç (1+2)*3 ¤Ç»È¤¦ ¤è¤¦¤Ë±é»»¤Î·ë¹ç¤Î¶¯¤µ¤ËµÕ¤é¤Ã¤ÆÉôʬ¼°¤ò¤Þ¤È¤á¤ë¤¿¤á¤Î¤â¤Î¤È¹Í¤¨¤¿Êý¤¬ ¤è¤¤¡¥¾å¤Î4ÈÖÌܤÎÎã¤Ç¤ï¤«¤ë¤è¤¦¤Ë¡¤´Ø¿ôŬÍÑ (float_of_int 1) ¤Ï +. ¤Ê¤É¤ÎÆó¹à±é»»»Ò¤è¤ê¤â·ë¹ç¤¬¶¯¤¤¡¥¤½¤Î¤¿¤á¡¤°ú¿ô¤¬ 1+2 ¤Î¤è¤¦¤ÊÊ£»¨ ¤Ê¼°¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¡¤ f 1 + 2 ¤Ï (f 1)+2 ¤Î»ö¤Ê¤Î¤Ç¡¤°ú¿ô¤Ë³ç¸Ì¤ò¤Ä ¤± f(1+2) ¤È½ñ¤¯É¬Íפ¬¤¢¤ë¡¥
¼Â¿ô±é»»¤Ë´Ø¤·¤Æ¤Ï¡¤»°³Ñ´Ø¿ô sin, cos, tan, Ê¿Êýº¬ sqrt ¤Ê¤É¤âͽ¤áÍѰդµ¤ì¤Æ¤¤¤ë¡¥¾Ü¤·¤¯¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤Î¤³¤È¡¥
ASCII ʸ»ú¤Î·¿¤Ç¡¤Äê¿ô¤È¤·¤Æ°úÍÑÉä ' ¤Ç°Ï¤Þ¤ì¤¿Ê¸»ú¡¤¤â¤·¤¯¤Ïɽ 2.3 ¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹(\" ¤ò½ü¤¯)¡¤ ¤Þ¤¿¡¤int·¿¤È¤ÎÊÑ´¹´Ø¿ô char_of_int, int_of_char ¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡¥
# '\120';; - : char = 'x' # int_of_char 'Z';; - : int = 90
ʸ»úÎó¤Î·¿¤Ç¡¤Äê¿ô¤È¤·¤ÆÆó½Å°úÍÑÉä " ¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎ󤬻Ȥï¤ì¤ë¡¥ ʸ»úÎóÃæ¤Îʸ»ú¤Ë¤Ï¡¤ \' ¤ò½ü¤¯¡¤É½2.3 ¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ ¤¬»ÈÍѤǤ¤ë¡¥ ¤Þ¤¿¡¤C ¤È¤Ï°Û¤Ê¤ê¡¤\000 ¤Ïʸ»úÎó¤Î½ªÃ¼¤òɽ¤µ¤Ê¤¤¡¥
s1 ^ s2 ¤ÇÆó¤Ä¤Îʸ»úÎós1, s2¤ò·ë¹ç¤·¤¿Ê¸»úÎó¤Ëɾ²Á¤µ¤ì¤ë¡¥¤Þ¤¿¡¤ s.[i] ¤Ç s ¤«¤é i ÈÖÌܤÎʸ»ú¤ò ¼è¤ê½Ð¤¹¤³¤È¤¬¤Ç¤¤ë¡¥
# "Hello," ^ " World!";; - : string = "Hello, World!" # ("Hello," ^ " World!").[10];; - : char = 'l'
Table 2.3: ¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹
\\ ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å(\) \' °úÍÑÉä ('), ' Æâ¤Ç¤Î¤ß͸ú \" Æó½Å°úÍÑÉä ("), " Æâ¤Ç¤Î¤ß͸ú \n ²þ¹Ô \r (¹ÔƬ¤Ø¤Î)Éüµ¢ \t ¿åÊ¿¥¿¥Ö \b ¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹ \ddd ddd ¤ò10¿Ê¤ÎASCII¥³¡¼¥É¤È¤¹¤ëʸ»ú
¿¿µ¶Ãͤò¼¨¤¹·¿¤Ç¡¤ÃÍ¤Ï true (¿¿), false (µ¶)¤ÎÆó¤Ä¤Ç¤¢¤ë¡¥ ±é»»¤È¤·¤Æ¡¤
¤Þ¤¿°Ê²¼¤ÎÈæ³Ó±é»»»Ò¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡¥¤É¤Î±é»»»Ò¤â ξÊդη¿¤¬Æ±¤¸¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¥
# (not (1 < 2)) || (() = ());; - : bool = true # 3.2 > 5.1;; - : bool = false # 'a' >= 'Z';; - : bool = true # 2 < 4.1;; 2 < 4.1;; ^^^ This expression has type float but is here used with type int
¤Þ¤¿¡¤if-¼°: if b then e1 else e2 ¤Ç¾ò·ïʬ´ô¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡¥b ¤¬ true ¤Ëɾ²Á¤µ¤ì¤¿¤È¤¤Ï e1 ¤ÎÃÍ¡¤ false ¤Ç¤¢¤ì¤Ð e2 ¤ÎÃͤ¬¼°Á´ÂΤÎÃͤˤʤ롥
# (if 3 + 4 > 6 then "foo" else "bar") ^ "baz";; - : string = "foobaz"
ʬ´ô¸å¤Ëɾ²Á¤µ¤ì¤ë¼° e1, e2 ¤Î·¿¤Ï°ìÃפ·¤Æ¤¤¤ëɬ Íפ¬¤¢¤ë¡¥¤Þ¤¿¡¤if-¼°¤Î else-Àá¤Ï¾Êά²Äǽ¤Ç¤¢¤ë¤¬¡¤¤½¤Î¾ì¹ç¤Ï else () ¤¬±£¤ì¤Æ¤¤¤ë¤È¸«¤Ê¤µ¤ì¤ë¡¥(¤¹¤Ê¤ï¤Á¡¤¤½¤Î¾ì¹ç then-Àá¤Ë¤Ï unit·¿¤Î¼°¤¬Íè¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¥)
Objective Caml ¤Ë¤Ï·¿(type)¤Î³µÇ°¤¬¤¢¤ê¡¤¤³¤ì¤«¤é³Ø¤ó¤Ç¤¤¤¯¤è¤¦¤Ë¸À¸ì¤ÎÂç ¤¤ÊÆÃħ¤Î¤Ò¤È¤Ä¤ò¤Ê¤·¤Æ¤¤¤ë¡¥·¿¤Ï¡¤ºÇ¤âñ½ã¤Ë¤Ï¡¤¾å¤Ç¤ß¤¿ 1 ¤Ï int·¿¤Ë °¤¹¤ë¤È¤¤¤Ã¤¿¡¤¥×¥í¥°¥é¥àÃæ¤Ç»È¤ï¤ì¤ë¥Ç¡¼¥¿¤ÎʬÎà¤Ç¤¢¤ë¡¥ ¤³¤ÎʬÎà¤Ï¡¤ true ¤Ë²Ã»»¤ò¹Ô¤¦¤Ê¤É¤Î¡¤·¿¥¨¥é¡¼(type error)¤È¸Æ¤Ð¤ì¤ë¡¤¤¢¤ë ¼ï¤Î¡Ö°ÕÌ£¤Î¤Ê¤¤¡×Áàºî¤¬¹Ô¤ï¤ì¤ë¤Î¤òËɤ°¤Î¤ËÍѤ¤¤é¤ì¤ë¡¥·¿¥·¥¹¥Æ¥à(type system)¤È¤¤¤¦ÍѸì¤Ï¡¤¥×¥í¥°¥é¥à¤«¤é·¿¥Á¥§¥Ã¥¯(typecheck)¤Ë ¤è¤ê¡¤·¿¥¨¥é¡¼¤ÎȯÀ¸¤òËɤ®¡¤°ÂÁ´¤Ë¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Î»ÅÁȤߤǡ¤¸À¸ì ¤´¤È¤ËÂ礤¯°Û¤Ê¤Ã¤Æ¤¤¤ë¡¥¤½¤â¤½¤â·¿¥¨¥é¡¼¤¬¤Ê¤ó¤Ç¤¢¤ë¤«¡¤¤È¤¤¤¦¤³¤È¤â¸À¸ì ¤Ë¤è¤Ã¤Æ°ã¤Ã¤Æ¤¯¤ë¤â¤Î¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¡¥Î㤨¤Ð¡¤Â¿¤¯¤Î¸À¸ì¤Ç¤Ï0¤Ç¤Î½ü»»¤Ï ·¿¥¨¥é¡¼¤È¤Ï¸«¤Ê¤µ¤ì¤Ê¤¤¤³¤È¤¬Â¿¤¤¡¥
Lisp, Perl, Postscript ¤Ê¤É¤Î¸À¸ì¤Ç¤Ï¡¤Ê¸Ë¡¤Ë¨¤·¤¿¥×¥í¥°¥é¥à¤Ï¤½¤Î¤Þ¤Þ¼Â¹Ô ¤ò»Ï¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡¥¤½¤Î¤«¤ï¤ê¼Â¹Ô»þ¤Ë¡¤²¿¤«¤ÎÁàºî¤¬¹Ô¤ï¤ì¤ëÅ٤ˡ¤¤½¤ì¤¬ ·¿¥¨¥é¡¼¤òµ¯¤¹¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥¤³¤Î¤è¤¦¤Ê¸À¸ì¤ò¡¤¤·¤Ð¤·¤Ð ưŪ¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì(dynamically typed language) ¤È¸Æ¤Ö¡¥
¤³¤ì¤ËÂФ·¤Æ¡¤C, C++, Java ¤Ê¤É¤Î¸À¸ì¤Ï¡¤¥³¥ó¥Ñ¥¤¥é¤¬¥×¥í¥°¥é¥à¼Â¹ÔÁ°¤Ë·¿ ¥Á¥§¥Ã¥¯¤ò¹Ô¤¤¡¤¤½¤ì¤òÄ̤俤â¤Î¤Î¤ß¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¡¥¤³¤Î¤è¤¦¤Ê¥×¥í¥°¥é ¥à¼Â¹ÔÁ°¤Ë·¿¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤â¤Î¤ò¡¤ÀÅŪ¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì(statically typed language)¤È¸Æ¤Ö3¡¥Objective Caml ¤âÀŠŪ¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì¤Ç¤¢¤ë¡¥
ÀÅŪ¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì¤Ç¤â¡¤C ¤ä C++ ¤Ê¤É¤Ï·¿¥·¥¹¥Æ¥à¤¬¼å¤¯¡¤·¿¥¨¥é¡¼¤ò ´°Á´¤ËËɤ°¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥°ìÈ̤ËÀÅŪ¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì¤Ë¤ª¤¤¤Æ¡¤·¿¥¨¥é¡¼¤ò µ¯¤¹Áàºî¤Î·ë²Ì¤Ï(¸À¸ì¥ì¥Ù¥ë¤Ç)̤ÄêµÁ 4 ¤Ê¤Î¤Ç¡¤C ¤Ê¤É¤Î¥×¥í¥°¥é¥à¤Ï¥¯¥é¥Ã¥·¥å¤·¤Æ ¤·¤Þ¤¦¡¥¤³¤ì¤ËÂФ·¤Æ Objective Caml ¤Ï°ìÅÙ·¿¥Á¥§¥Ã¥¯¤òÄ̤ä¿¥×¥í¥° ¥é¥à¤Ï·¿¥¨¥é¡¼¤òµ¯¤µ¤Ê¤¤À¼Á(·¿°ÂÁ´À)¤¬Êݾڤµ¤ì¤Æ¤¤¤ë¡¥ÀÅŪ¤Ë·¿¤Å¤±¤µ¤ì°ÂÁ´ À¤¬ÊݾڤǤ¤ë¸À¸ì¤ò¶¯¤¯·¿¤Å¤±¤µ¤ì¤¿(strongly typed)¸À¸ì¤È¤¤¤¦¤³ ¤È¤¬¤¢¤ë¡¥
°Ê¾å¤ò¡¤¤Þ¤È¤á¤ë¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡¥Æ°Åª¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì¤ÏɬÁ³Åª¤Ë Á´¤Æ¤Î°ÂÁ´À¤Î¥Á¥§¥Ã¥¯¤ò¹Ô¤¨¤ë¤Î¤Ç unsafe–dynamically typed ¤ÎÍó¤¬ ¶õ¤¤¤Æ¤¤¤ë¡¥
statically typed | dynamically typed | |
unsafe | C, C++, etc. | — |
safe | Java, ML, Haskell, etc. | Lisp, Scheme, Perl, PostScript, etc. |
ÀÅŪ·¿¥·¥¹¥Æ¥à¤Ï¡¤¥×¥í¥°¥é¥à¤ÎʸÌ̤À¤±¤«¤é¡¤¤Ä¤Þ¤ê·×»»Á°¤Î Ê£»¨¤Ê¼°¤ËÂФ·¤Æ·¿¤ÎÀ°¹çÀ¤òȽÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¤¸«ÀѤâ¤ê¤¬¤É¤¦¤·¤Æ¤â ÊݼéŪ¤Ë¤Ê¤é¤¶¤ë¤òÆÀ¤Ê¤¤¡¥Î㤨¤Ð
if ⟨ Ê£»¨¤Ê¼° ⟩ then 1 else "foo"
¤Ï¡¤⟨ Ê£»¨¤Ê¼° ⟩¤¬¾ï¤Ë true¤òÊÖ¤¹¤è¤¦¤Ê¼°¤Ç¤¢¤Ã¤¿¤È¤·¤¿¤é¡¤ else-À᤬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¤¤Î¤Ç¡¤À°¿ô¤¬É¬ÍפÊʸ̮¤Ç»ÈÍѤ·¤Æ¤â ¼Â¹Ô»þ¤Ë¤Ï²¿¤ÎÌäÂê¤â¤Ê¤¤¡¥¤·¤«¤·¡¤·¿¥·¥¹¥Æ¥à¤Ï¾ò·ï¼°¤ÎÃͤ˴ط¸¤Ê¤¯¡¤Ê¬ ´ôÀè¤Î¼°¤Î·¿¤¬°ìÃפ¹¤ë¤³¤È¤òÍ׵᤹¤ë¡¥¤³¤Î¤¿¤á¡¤·¿¥¨¥é¡¼¤òµ¯¤µ¤º¤Ë¼Â¹Ô¤Ç¤ ¤ë¤Ï¤º¤Î¥×¥í¥°¥é¥à¤¬·¿¥Á¥§¥Ã¥¯¤òÄ̤é¤Ê¤¤²ÄǽÀ¤¬¤¢¤ë¡¥ÀÅŪ·¿ÉÕ¸À¸ì¤ÎÀß ·×¼Ô¤Ë¤È¤Ã¤Æ¤Ï°ÂÁ´¤Ê¥×¥í¥°¥é¥à¤À¤±¤ò¼õÍý¤·¤Ä¤Ä¡¤¤Ç¤¤ë¸Â¤ê¿¤¯¤Î°ÂÁ´¤Ê ¥×¥í¥°¥é¥à¤ò¼õÍý¤Ç¤¤ë¤è¤¦¤Ê·¿¥·¥¹¥Æ¥à¤òÀ߷פ¹¤ë¤Î¤¬¡¤Æ¬¤ÎǺ¤Þ¤»¤É¤³¤í ¤Ç¤¢¤ë¡¥
°ìÊý¡¤Æ°Åª¤Ë·¿¤Å¤±¤µ¤ì¤ë¸À¸ì¤ÏÁàºî¤¬¹Ô¤ï¤ì¤ëÅ٤ˡ¤¼Â¹Ô¤¬°ÂÁ´¤Ë¹Ô¤¨¤ë¤«¤É¤¦¤« ¥Á¥§¥Ã¥¯¤ò¤¹¤ë¤Î¤Ç¡¤¥Á¥§¥Ã¥¯¤ò¤Þ¤¸¤á¤Ë¤ä¤ë¸Â¤ê°ÂÁ´¤Ë¼Â¹Ô¤Ç¤¤ë¤â¤Î¤Î¡¤ ¥Á¥§¥Ã¥¯¤Î¥³¥¹¥È¤ò;·×¤Ëʧ¤¦¤³¤È¤Ë¤Ê¤ë¡¥
Á°Àá¤Ç³Ø¤ó¤À¤Î¤Ï´Êñ¤ÊÁàºî¤òÁȤ߹ç¤ï¤»¤Æ¡¤Ê£»¨¤Ê·×»»¤ò¹Ô¤¦¼°¤òÁȤßΩ¤Æ¤ëÊý Ë¡¤Ç¤¢¤ë¡¥·×»»¤·¤¿·ë²Ì¤ÎÃͤˤÏ̾Á°¤ò¤Ä¤±¤Æ¤ª¤¤¤Æ¤¢¤È¤Ç»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥ ¤³¤ì¤ò¹Ô¤¦¤Î¤¬ let Àë¸À¤Ç¤¢¤ë¡¥
¤Þ¤º¤Ï¡¤let Àë¸À¤ÎÎã¤ò¤ß¤Æ¤ß¤ë¡¥
# let pi = 3.1415926535;; val pi : float = 3.1415926535
¤³¤ì¤Ï pi ¤È¤¤¤¦Ì¾Á°¤ÎÊÑ¿ô¤òÀë¸À¤·¡¤¤½¤ÎÊÑ¿ô¤ò3.1415926535 ¤È¤¤¤¦¼Â¿ô¤Ë «Çû¤·¤Æ¤¤¤ë¡¥¥³¥ó¥Ñ¥¤¥é¤Î½ÐÎϤȤ·¤Æ¡¤ÃͤÎ̾Á°¤¬Àë¸À¤µ¤ì¤¿¤³¤È¤ò¼¨¤¹ val¡¤ÊÑ¿ô̾ pi¡¤¤½¤ÎÊÑ¿ô¤¬Â«Çû¤µ¤ì ¤¿ÃÍ(¤â¤Á¤í¤ó3.1415926535)¡¤¤È¤½¤Î·¿¤¬ÆÀ¤é¤ì¤ë¡¥¤³¤ÎÃͤϡ¤°Ê¹ß¤Ç pi ¤È ¤¤¤¦Ì¾Á°¤Ç»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤¡¤pi ¤È½ñ¤¯¤³¤È¤È¡¤3.1415926535 ¤È½ñ¤¯¤³¤È ¤ÏƱ¤¸¤³¤È¤ò°ÕÌ£¤¹¤ë¡¥
# pi;; - : float = 3.1415926535 # let area_circle2 = 2.0 *. 2.0 *. pi;; val area_circle2 : float = 12.566370614
°ìÈÌŪ¤Ë¤Ï
let x = e;;
¤È¤¤¤¦·Á¤Ç¡¤Àë¸À¤µ¤ì¤¿ÊÑ¿ô x ¤ò¡Ö¼° e ¤òɾ²Á¤·¤¿Ã͡פË«Çû¤¹¤ë¡¥ÊÑ¿ô¤òÀë¸À¤¹¤ë¤³¤È¤Ë¤Ï¡¤
¤È¤¤¤Ã¤¿°ÕµÁ¤¬¤¢¤ë¡¥¤Ò¤È¤Ä¤á¤Î´ÑÅÀ¤«¤é¸À¤¨¤Ð¡¤Ê¬¤«¤ê¤Ë¤¯¤¤ÊÑ¿ô̾¤ò ¤Ä¤±¤ë¤³¤È¤ÏÈò¤±¤ë¤Ù¤¤Ç¤¢¤ê¡¤¤¿¤È¤¨°ì»þŪ¤Ë¤·¤«»È¤ï¤Ê¤¤ÊÑ¿ô¤Ç¤â °ÕÌ£¤òÈ¿±Ç¤·¤¿Ì¾Á°¤ò¤Ä¤±¤ë¤Ù¤¤Ç¤¢¤ë¡¥¤Õ¤¿¤Ä¤á¤Ë´Ø¤·¤ÆÊ䤷¤Æ¤ª¤¯¤È¡¤ ÊÑ¿ô¤¬Â«Çû¤µ¤ì¤ëÂоݤϷ׻»·ë²Ì¤ÎÃͤǤ¢¤Ã¤Æ¡¤¼°¼«ÂΤǤϤʤ¤¤³¤È¤ËÃí°Õ¡¥ ¾å¤Ç¡¤¡Öpi ¤È½ñ¤¯¤³¤È¤È¡¤3.1415926535 ¤È½ñ¤¯¤³¤È¤ÏƱ¤¸¤³¤È¤ò °ÕÌ£¤¹¤ë¡×¤È¤¤¤Ã¤¿¤Î¤Ï¼°¼«ÂΤ¬ÃͤˤʤäƤ¤¤ë¤«¤é¤Ç¤¢¤ë¡¥¤¿¤À¡¤ºÆÅÙ·×»» ¤¹¤ë¤³¤È¤Î̵Â̤ò½ü¤±¤Ð¡¤(¥Ç¥£¥¹¥×¥ì¥¤½ÐÎϤʤɤÎÉûºîÍѤ¬¤Ê¤¤¸Â¤ê) ¼°¤È¤½¤ÎÃͤϷ׻»·ë²Ì¤Ë±Æ¶Á¤ò¤ª¤è¤Ü¤µ¤Ê¤¤¡¥
Objective Caml ¤Ë¤ª¤±¤ëÊÑ¿ôÀë¸À¤ÏÃͤË̾Á°¤ò¤Ä¤±¤ë¤â¤Î¤Ç¡¤C, C++ ¤Î¤è¤¦¤Ë¡¤ ¥á¥â¥êÎΰè¤Ë̾Á°¤ò¤Ä¤±¤ë¤â¤Î¤Ç¤Ï¤Ê¤¯¡¤ÂåÆþʸ¤Î¤è¤¦¤Ê¤â¤Î¤Ç¡ÖÃæ¿È¤ò¹¹¿·¤¹¤ë¡× ¤³¤È¤Ï¤Ç¤¤Ê¤¤¡¥¤¿¤À¤·Æ±¤¸Ì¾Á°¤ÎÊÑ¿ô¤òºÆÀë¸À¤¹¤ë¤³¤È¤Ï¤Ç¤¤ë¡¥
# let one = 1;; val one : int = 1 # let two = one + one;; val two : int = 2 # let one = "One";; val one : string = "One" # let three = one ^ one ^ one;; val three : string = "OneOneOne"
¤³¤Î¾ì¹ç¡¤one ¤ÎÃÍ¤Ï 1 ¤«¤é "One" ¤Ë¹¹¿·¤µ¤ì¤¿¤ï¤±¤Ç¤Ï¤Ê¤¯¡¤ Ʊ¤¸Ì¾Á°¤ÎÊÑ¿ôÀë¸À¤Ë¤è¤êÁ°¤ÎÀë¸À¤¬±£¤µ¤ì¤Æ¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¤À¤±¤Ê¤Î¤Ç¤¢¤ë¡¥ (¤½¤â¤½¤âÂåÆþ¤À¤È¹Í¤¨¤ë¤È¡¤Á°¤ÎÀë¸À¤È±¦Êդη¿¤¬°ìÃפ·¤Æ¤¤¤Ê¤¤¤Î¤ÇÊѤǤ¢¤ë¡¥)
Àë¸À¤µ¤ì¤¿ÊÑ¿ô¤Ï¾ï¤Ë͸úÈϰÏ(scope)¤È¤¤¤Ã¤Æ¡¤¤½¤ÎÊÑ¿ô¤ò»È¤Ã¤Æ ¤è¤¤¥×¥í¥°¥é¥àʸÌ̾å¤ÎÈϰϤ¬³äÅö¤Æ¤é¤ì¤ë¡¥Î㤨¤Ð¡¤letÀë¸À¤Î͸úÈϰÏ(scope)¤ÏÀë¸À°Ê¹ß¡¤¥Õ¥¡¥¤¥ë(ocaml¥»¥Ã¥·¥ç¥ó)½ªÎ»¤Þ¤Ç¤Ç¤¢¤ë¡¥ ÊÑ¿ô¤Î¤Ò¤È¤Ä¤Ò¤È¤Ä¤Î»ÈÍÑ(Àë¸À¤È¶èÊ̤·¤ÆÊÑ¿ô»²¾È(variable reference)¤È¤â¸À¤¦)¤ËÂФ·¤Æ¡¤(°ÊÁ°¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ëʪ¤Ç)ºÇ¤â¶á¤¤¤â¤Î ¤¬Âбþ¤¹¤ë¡¥¤³¤ÎÂбþ´Ø·¸¤Ï¡¤¼Â¹Ô»þ¤Ç¤Ï¤Ê¤¯¥×¥í¥°¥é¥à¤¬½ñ¤«¤«¤ì¤¿(¤â¤·¤¯¤Ï ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿)»þÅÀ¤Ç·èÄꤵ¤ì¤ë¤Î¤Ç¡¤¡Ö¤³¤Î¸À¸ì¤Ç¤ÎÊÑ¿ôÀë¸À¤Ï ÀÅŪ͸úÈϰÏ(static scope¡¤ lexical scope)¤ò»ý¤Ä¡×¤È¸À¤ï¤ì¤ë¡¥
¤È¤³¤í¤Ç¡¤Objective Caml ¤Ç¤ÏÊÑ¿ô¤Î·¿¤Ï¥³¥ó¥Ñ¥¤¥é¤¬¼«Æ°Åª¤Ë¿äÏÀ¤·¤Æ¤¯¤ì¤ë¤¿ ¤á¡¤Àë¸À¤¹¤ëɬÍפ¬¤Ê¤¤¡¥¤¿¤À¡¤¥×¥í¥°¥é¥à¤Î°ÕÌ£¤ò¤ï¤«¤ê¤ä¤¹¤¯¤¹¤ë¤¿¤á¡¤ ¥Ç¥Ð¥Ã¥°¤Î¤¿¤á¡¤ÊÑ¿ô¤Î·¿¤òÌÀ¼¨Åª¤Ë¼¨¤·¤Æ¤ª¤¤¿¤¤¤È¤¤Ï¡¤ÊÑ¿ô̾¤Î¸å¤Ë “: ⟨ ·¿ ⟩” ¤È¤·¤ÆÀë¸À¤¹¤ë¤³¤È¤â¤Ç¤¤ë¡¥¤Þ¤¿¡¤Ê£¿ô¤Îlet-Àë ¸À¤Ï¤½¤Î¶Ìܤ¬¤Ï¤Ã¤¤ê¤·¤Æ¤¤¤ë(¼¡¤Î let ¤¬Íè¤ëľÁ°¤ÇÀÚ¤ì¤ë)¤Î¤Ç´Ö¤Ë ;; ¤ò¤Ä¤±¤º¤Ëʤ٤뤳¤È¤¬¤Ç¤¤ë¡¥
# let pi : float = 3.1415926535 let e = 2.718281828;; val pi : float = 3.1415926535 val e : float = 2.718281828
Æó¤Ä¤ÎÀë¸À¤¬¤Þ¤È¤á¤Æ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ·ë²Ì¤¬¤Þ¤È¤Þ¤Ã¤Æ½ÐÎϤµ¤ì¤Æ¤¤¤ë¤³¤È¤ËÃíÌÜ¡¥
ÊÑ¿ô¤Î̾Á°¤È¤·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤¤ë¤Î¤Ï¡¤
¤Ç¤¢¤ë¤è¤¦¤ÊǤ°Õ¤ÎŤµ¤Îʸ»úÎó¤Ç¡¤É½2.4¤Î Objective Caml ¤Îʸˡ¥¡¼¥ï¡¼ ¥É¤È _ °ìʸ»ú¤Î¤ß¤«¤é¤Ê¤ë¤â¤Î¤ò½ü¤¯¤â¤Î¤Ç¤¢¤ë¡¥
¤³¤³¤Ç¹â¥ì¥Ù¥ë¤Ê¼°¤Î°ÕÌ£¤òÎ¥¤ì¤Æ¡¤Ì¾Á°»²¾È¤¬¤É¤Î¤è¤¦¤Ë¼Â¸½¤µ¤ì¤Æ¤¤¤ë¤«¤ò¤ß ¤Æ¤ß¤ë¡¥¥×¥í¥°¥é¥à¤Î¼Â¹ÔÃæ¤Ë¤Ï¡¤¼Â¹Ô¤·¤Æ¤¤¤ë»þÅÀ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë(͸úÈÏ°Ï¤Ë ¤¢¤ë)ÊÑ¿ô̾¤È¤½¤ÎÃͤÎÁȤΥꥹ¥È¤¬¥á¥â¥ê¾å¤ËÊݸ¤µ¤ì¤Æ¤¤¤ë¡¥¤³¤Î¥Ç¡¼¥¿¤Î¤³¤È ¤ò´Ä¶(environment)¤È¤¤¤¦¡¥ÆÃ¤Ë¡¤¥×¥í¥°¥é¥à¤Î°ìÈÖ³°Â¦¤Ë¤ª¤±¤ë´Ä¶ ¤ò¥È¥Ã¥×¥ì¥Ù¥ë´Ä¶(top-level environment)¡¤¤Þ¤¿¤ÏÂç°è´Ä ¶(global environment)¤È¤¤¤¦¡¥
Î㤨¤Ð¡¤ocaml ¤òµ¯Æ°¤·¤¿¤È¤¤Ë¤Ï¡¤sin, max_int ¤Ê¤É¤Î̾Á°¤¬Âç°è´Ä¶¤Ë ¤¢¤ë¾õÂ֤ǥ»¥Ã¥·¥ç¥ó¤¬»Ï¤Þ¤ë(¿Þ2.1)¡¥
letÀë¸À¤ò¼Â¹Ô¤¹¤ëºÝ¤Ë¤Ï¡¤¤³¤Î¥È¥Ã¥×¥ì¥Ù¥ë´Ä¶¤ÎºÇ¸å¤Ë¡¤¿·¤·¤¤ÊÑ¿ô ¤È¤½¤ÎÃͤÎÁȤ¬Äɲ䵤ì¤ë(¿Þ2.2) ¡¥ÊÑ¿ô¤Î»²¾È¤Ï¡¤¤³¤Î´Ä¶¤ò²¼¤«¤é ½çÈÖ¤ËÊÑ¿ô¤òõ¤·¤Æ¹Ô¤¯Áàºî¤ËÂбþ¤¹¤ë5¡¥¤½¤Î¤¿¤á¡¤Æ±¤¸Ì¾Á°¤ÎÊÑ¿ô¤¬ºÆÄêµÁ¤µ¤ì ¤¿¾ì¹ç¡¤¾å¤Î¥¨¥ó¥È¥ê¤Ëõº÷¤¬Åþ㤷¤Ê¤¤¤¿¤á¤Ë»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¯¤Ê¤ë¡¥ Âç°è´Ä¶¤«¤é¥¨¥ó¥È¥ê¤¬ºï½ü¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡¥ ¤½¤Î¤¿¤áletÀë¸À¤Î͸úÈϰϤÏÀë¸Àľ¸å¤«¤é¥×¥í¥°¥é¥à½ªÎ»¤Þ¤Ç¤Ê¤Î¤Ç¤¢¤ë¡¥
a_2' ____ Cat _'_'_ 7eleven 'ab2_ _ |
¿¤¯¤Î¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¤Ç¤Ï¡¤·×»»¼ê½ç¤Ë̾Á°¤ò¤Ä¤±¤ÆÃê¾Ý²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥ Objective Caml ¤Ç¤Ï¤³¤ì¤ò´Ø¿ô(function)¤È¸Æ¤Ö¡¥
¾å¤ÇÄêµÁ¤·¤¿ÊÑ¿ô pi ¤ò»È¤Ã¤Æ¡¤±ß¤ÎÌÌÀѤòµá¤á¤ë¤³¤È¤ò¹Í¤¨¤ë¡¥±ß¤ÎÌÌÀÑ ¼«ÂΤϤâ¤Á¤í¤ó¡¤
⟨Ⱦ·Â⟩ *. ⟨Ⱦ·Â⟩ *. pi
¤È¤¤¤¦¼°¤Çµá¤Þ¤ë¤ï¤±¤À¤¬¡¤°ã¤Ã¤¿È¾·Â¤ËÂФ·¤Æ¡ÖƱ¤¸¤è¤¦¤Ê¼°¡×¤ò ²¿ÅÙ¤âÆþÎϤ¹¤ë¤Î¤Ï¡¤´Ö°ã¤¤¤Î¤â¤È¤Ç¤¢¤ê¡¤¤Þ¤¿¡¤¤½¤Î¼°¤¬²¿¤ò°ÕÌ£¤¹¤ë¤Î¤«¤¬ ¤ï¤«¤ê¤Ë¤¯¤¯¤Ê¤ë¡¥¤½¤³¤Ç¡¤¡Ö»÷¤¿¤è¤¦¤Ê·×»»¤Î¼ê½ç¡×¤Ë̾Á°¤ò¤Ä¤±¡¤ ½Ð¸½¸Ä½ê¤Ë¤è¤Ã¤Æ°ã¤¦Éôʬ(¼ÂºÝ¤ÎȾ·Â)¤Ï¡¤¥Ñ¥é¥á¡¼¥¿²½(parameterization) ¤¹¤ë¤³¤È¤ò¹Í¤¨¤ë¡¥¤³¤Î¡Ö¥Ñ¥é¥á¡¼¥¿²½¤µ¤ì¤¿·×»»¼ê½ç¡×¤¬´Ø ¿ô¤Ç¤¢¤ë¡¥
Objective Caml ¤Ç¤Ï±ß¤ÎÌÌÀѤòµá¤á¤ë´Ø¿ô¤Ï¼¡¤Î¤è¤¦¤ËÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥
# let circle_area r = (* area of circle with radius r *) r *. r *. pi;; val circle_area : float -> float = <fun>
´Ø¿ôÀë¸À¤Ë¤â let Àë¸À¤ò»ÈÍѤ¹¤ë¡¥ÆþÎϤΠcircle_area ¤¬Àë¸À¤µ¤ì¤¿´Ø ¿ô¤Î̾Á°¤Ç¤¢¤ë¡¥´Ø¿ô̾¤Î¸å¤Î r ¤¬¥Ñ¥é¥á¡¼¥¿¤Ç¤¢¤ê¡¤ÄêµÁÆâ¤ÇÄ̾ï¤ÎÊÑ ¿ô¤ÈƱ¤¸¤è¤¦¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¥= ¤è¤ê¤¢¤È¤Î¼° r *. r *. pi ¤¬ ´Ø¿ô¤ÎËÜÂÎ(body)¤È¸Æ¤Ð¤ì¤ëÉôʬ¤Ç·×»»¼ê½ç¤Ç¤¢¤ë¤È¤³¤í¤Î¼°¤ò½ñ ¤¯¤È¤³¤í¤Ç¤¢¤ë¡¥(;; ¤Ï¤¤¤Ä¤â¤Î¤è¤¦¤Ë¥³¥ó¥Ñ¥¤¥é¤ËÆþÎϽªÎ»¤òÃΤ餻¤ë¤â ¤Î¤Ç¤¢¤ë¡¥)¥³¥ó¥Ñ¥¤¥é¤«¤é¤Î±þÅú¤Ï¡¤Àë¸À¤µ¤ì¤¿Ì¾Á° circle_area¡¤¤½¤Î ·¿ float->float¡¤¤½¤ÎÃÍ <fun> ¤Èʤó¤Ç¤¤¤ë¡¥·¿¤ÎÃæ¤Î -> ¤Ï¡¤ ⟨ ¥Ñ¥é¥á¡¼¥¿¤Î·¿ ⟩->⟨ ·ë²Ì¤Î·¿ ⟩ ¤È¤¤¤¦·Á¤Ç¡¤¤½¤Î circle_area ¤¬´Ø¿ô¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤·¤Æ¤ª¤ê¡¤¤³¤³¤Ç¤Ï¼Â¿ô¤ò¤È¤Ã¤Æ¼Â¿ô ¤òÊÖ¤¹¤³¤È¤òɽ¤·¤Æ¤¤¤ë¡¥-> ¤Î¤è¤¦¤Ë¤è¤êñ½ã¤Ê·¿¤«¤é·¿¤ò¹½À®¤¹¤ëµ¹æ ¤ò·¿¹½ÃÛ»Ò(type constructor)¤È¸Æ¤Ö¡¥´ðËÜ·¿¤â0¸Ä¤Î·¿¤«¤é·¿¤ò ºî¤ë·¿¹½ÃۻҤȹͤ¨¤é¤ì¤ë¡¥<fun> ¤Ï¡¤¤Ê¤ó¤é¤«¤Î´Ø¿ô¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Æ ¤¤¤ë¡¥º£¤Þ¤Ç¸«¤Æ¤¤¿À°¿ô¤Ê¤É¤È¤Ï°Û¤Ê¤ê¡¤¥Ç¥£¥¹¥×¥ì¥¤¤Ëɽ¼¨¤Ç¤¤ëɽ¸½ (“3” ¤Ê¤É)¤ò»ý¤¿¤Ê¤¤¡¥
Àë¸À¤µ¤ì¤¿´Ø¿ô¤Ï¡¤ÁȤ߹þ¤ß¤Î int_of_float ¤Ê¤É¤ÈƱ¤¸¤è¤¦¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤¬ ¤Ç¤¤ë¡¥
# circle_area 2.0;; - : float = 12.566370614
´Ø¿ô¸Æ¤Ó½Ð¤·(´Ø¿ôŬÍÑ(function application)¤È¤â¤¤¤¦)¤Ï¡¤ ºÇ¤âÁÇËѤʸ«Êý¤Ç¤Ï¡¤´Ø¿ôËÜÂÎÃæ¤Î¥Ñ¥é¥á¡¼¥¿ r ¤ò°ú¿ô 2.0 ¤Ë ÃÖ¤´¹¤¨¤¿¼°¡¤2.0 *. 2.0 *. pi ¤òɾ²Á¤·¡¤¤½¤ÎÃͤ¬¡¤¸Æ¤Ó½Ð¤·¼° Á´ÂΤÎÃͤȤʤ롥
Objective Caml ¤Ç¤Ï¡¤ÃͤΫÇû¤ÈƱÍÍ¡¤Àë¸À¤µ¤ì¤ë´Ø¿ô¤Î¥Ñ¥é¥á¡¼¥¿¤ª¤è¤Ó·ë²Ì¤Î ·¿¤òÌÀ¼¨Åª¤ËÀë¸À¤¹¤ëɬÍפ¬¤Ê¤¤¡¥¤³¤ì¤Ï¡¤¥³¥ó¥Ñ¥¤¥é¤¬·¿¿äÏÀ(type inference)¤ò¹Ô¤Ã¤Æ¡¤¾å¤ÎÎã¤Î¤è¤¦¤Ë·¿¾ðÊó¤òÊä¤Ã¤Æ¤¯¤ì¤ë¤¿¤á¤Ç¤¢¤ë¡¥ ´Êñ¤Ê·¿¿äÏÀ¤Î»ÅÁȤߤˤĤ¤¤Æ¤Ï¡¤¸åÄø¸«¤Æ¤¤¤¯¤³¤È¤Ë¤¹¤ë¡¥¤½¤ì¤Ç¤âÌÀ¼¨Åª ¤Ë·¿¤òÀë¸À¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¤ÃͤΫÇû¤ÈƱÍÍ¡¤·¿¾ðÊó¤òÊ䤦¤³¤È¤¬¤Ç¤¤ë¡¥
# let circle_area(r : float) : float = (* area of circle with radius r *) r *. r *. pi;; val circle_area : float -> float = <fun>
·ë²Ì¤Î·¿¤Ï = ¤ÎÁ°¤Ëµ½Ò¤¹¤ë¡¥¤Þ¤¿¡¤ ¥Ñ¥é¥á¡¼¥¿¤ò°Ï¤à () ¤¬É¬Íפˤʤ롥 (·¿Àë¸À¤ò¤·¤Ê¤¤¾ì¹ç¤Ç¤â () ¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤¤ë¤¬¡¤¸Æ¤Ó½Ð¤·¤Î»þ¤Î¾Êά¤ò¹Ô ¤¦¤Î¤ÈƱÍͤÊÍýͳ¤Ç () ¤Ï¾Êά¤¹¤ë¤³¤È¤¬Â¿¤¤¡¥)
¤³¤³¤Ç¤Î¡¤´Ø¿ôÀë¸À¤Îʸˡ¤ò¤Þ¤È¤á¤ë¤È¡¤
let f ⟨ parameter ⟩ [: t] = e ¤¿¤À¤· ⟨ parameter ⟩ ::= x | (x: t)
¤È¤Ê¤ë6¡¥ [ ] Éôʬ¤Ï¥ª¥×¥·¥ç¥ó¤Ç¤¢¤ë¡¥f ¤Ï´Ø¿ô̾¤òɽ¤¹¥á¥¿ÊÑ¿ô¡¤ t ¤Ï·¿¤òɽ¤¹¥á¥¿ÊÑ¿ô¤Ç¤¢¤ë¡¥ ´Ø¿ô̾¡¦¥Ñ¥é¥á¡¼¥¿Ì¾¤È¤·¤Æµö¤µ¤ì¤ë̾Á°¤ÏÊÑ¿ô¤Î¾ì¹ç¤ÈƱ¤¸¤Ç¤¢¤ë¡¥ (¼Â¤Ï¡¤ÊÑ¿ô̾¡¤´Ø¿ô̾¡¤¥Ñ¥é¥á¡¼¥¿Ì¾¤ò¶èÊ̤¹¤ëɬÍפϤʤ¤¡¥) ÃͤÎ̾Á°¤ÈƱ¤¸¤è¤¦¤Ë¡¤´Ø¿ô̾¡¦¥Ñ¥é¥á¡¼¥¿Ì¾¤â¤ï¤«¤ê¤ä¤¹¤¤¤â¤Î¤ò¤Ä¤±¡¤ ´Ø¿ô¤¬²¿¤ò·×»»¤¹¤ë¤Î¤«¡¤¥³¥á¥ó¥È¤ò½ñ¤¯Êʤò¤Ä¤±¤¿¤¤¡¥
ÀÅŪ͸úÈϰϤˤĤ¤¤ÆÊä ´Ø¿ôËÜÂÎÃæ¤Î pi ¤Ï¡¤ÀÅŪ͸úÈϰϤˤè¤Ã¤Æ¡¤´Ø¿ôÀë¸À¤Î»þÅÀ¤ÇÀë¸À¤µ ¤ì¤Æ¤¤¤ë¤â¤Î¤¬»²¾È¤µ¤ì¤ë¡¥¤½¤Î¤¿¤á¡¤circle_area ¤Î¤¢¤È¤Çpi ¤òºÆÀë ¸À¤·¤Æ¤â¡¤circle_area ¤ÎÄêµÁ¤Ë¤Ï±Æ¶Á¤¬¤Ê¤¤¡¥# let pi = 1.0;; val pi : float = 1. # circle_area 2.0;; - : float = 12.566370614¤³¤ì¤ËÂФ·¤Æ¡¤´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤¿»þÅÀ¤Î pi ¤ÎÃͤò¸«¤ë dynamic scoping ¤È¤¤¤¦ Êý¼°¤òºÎÍѤ·¤Æ¤¤¤ë¸À¸ì(Î㤨¤Ð Emacs Lisp)¤â¤¢¤ë¡¥dynamic scoping ¤Î²¼¤Ç¤Ï¡¤ ¾å¤Î·ë²Ì¤Ï¡¤4.0 (¤Ä¤Þ¤ê 2.0 *. 2.0 *. 1.0) ¤Ë¤Ê¤ë¡¥