Previous Up Next

3.4  ML2 — ÄêµÁ¤ÎƳÆþ

¤³¤³¤Þ¤Ç¡¤ML¥×¥í¥°¥é¥àÃæ¤Ç»²¾È¤Ç¤­¤ëÊÑ¿ô¤Ï main.ml Ãæ¤Î initial_env ¤Ç¤¢¤é¤«¤¸¤áÄê¤á¤é¤ì¤¿ÊÑ¿ô¤Ë¸Â¤é¤ì¤Æ¤¤¤¿¡¥ML2¤Ç ¤ÏÊÑ¿ôÀë¸À¤Îµ¡Ç½¤ò¡¤let Àë¸À¤È let ¼°¤È¤·¤ÆƳÆþ¤¹¤ë¡¥

3.4.1  let Àë¸À¡¦¼°¤ÎƳÆþ

ML2 ¤Î¹½Ê¸¤Ï¡¤°Ê²¼¤Î¤è¤¦¤ËÍ¿¤¨¤é¤ì¤ë¡¥

 <¥×¥í¥°¥é¥à>::=… | let  <¼±ÊÌ»Ò> = <¼°> ;; 
  <¼°>::=… 
 |let <¼±ÊÌ»Ò> = <¼°1>                in <¼°2>

expressed value, denoted value ¤È¤â¤Ë°ÊÁ°¤ÈƱ¤¸¡¤¤Ä¤Þ¤ê¡¤ let ¤Ë¤è¤ë«Çû¤ÎÂоݤϡ¤¼°¤ÎÃͤǤ¢¤ë¡¥¤³¤Î³ÈÄ¥¤Ëȼ¤Ê¤¦ ¥×¥í¥°¥é¥à¤ÎÊѹ¹ÅÀ¤ò¿Þ7¤Ë¼¨¤¹¡¥syntax.ml ¤Ç¤Ï¡¤¹½Ê¸¤Î ³ÈÄ¥¤Ëȼ¤¦¥³¥ó¥¹¥È¥é¥¯¥¿¤ÎÄɲá¤parser.mly ¤Ç¤Ï¡¤¶ñÂÎŪ¤Ê¹½Ê¸µ¬Â§ (let¤Ï·ë¹ç¤¬ if¤ÈƱÄøÅ٤˼夤)¤ÎÄɲá¤lexer.mll¤Ç¤Ï¡¤Í½Ìó¸ì ¤Èµ­¹æ¤ÎÄɲäò¹Ô¤Ã¤Æ¤¤¤ë¡¥eval_exp ¤Î let ¼°¤ò°·¤¦Éôʬ¤Ç¤Ï¡¤ ºÇ½é¤Ë¡¤Â«ÇûÊÑ¿ô̾¡¤¼°¤ò¼è¤ê¤À¤·¡¤³Æ¼°¤òɾ²Á¤¹¤ë¡¥ ¤½¤ÎÃͤò»È¤Ã¤Æ¡¤¸½ºß¤Î´Ä¶­¤ò³ÈÄ¥¤·¡¤ËÜÂμ°¤òɾ²Á¤·¤Æ¤¤¤ë¡¥


syntax.ml:

type exp = 
   ...
  | LetExp of id * exp * exp

type program = 
    Exp of exp
  | Decl of id * exp

parser.mly:

%token LET IN EQ

toplevel :
     Expr SEMISEMI { Exp $1 }
   | LET ID EQ Expr SEMISEMI { Decl ($2, $4) }

Expr :
     IfExpr { $1 }
   | LetExpr { $1 }
   | LTExpr { $1 }

LetExpr :
     LET ID EQ Expr IN Expr { LetExp ($2, $4, $6) }

lexer.mll:

let reservedWords = [
   ...
  ("in", Parser.IN);   
  ("let", Parser.LET);
]

...

| "<"  Parser.LT 
| "="  Parser.EQ 

eval.ml:

let rec eval_exp env = function
   ...
   | LetExp (id, exp1, exp2) ->
       let value = eval_exp env exp1 in
         eval_exp (Environment.extend id value env) exp2

let eval_decl env = function
     Exp e -> let v = eval_exp env e in ("-", env, v)
   | Decl (id, e) ->
       let v = eval_exp env e in (id, Environment.extend id v env, v)

Figure 7: ¶É½êÄêµÁ


Exercise 4  [ɬ½¤²ÝÂê] ML2 ¥¤¥ó¥¿¥×¥ê¥¿¤òºîÀ®¤·¡¤¥Æ¥¹¥È¤»¤è¡¥
Exercise 5  [Æñ°×ÅÙ 1] Objective Caml ¤Ç¤Ï¡¤letÀë¸À¤ÎÎó¤ò°ìÅÙ¤ËÆþÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥ ¤³¤Îµ¡Ç½¤ò¼ÂÁõ¤»¤è¡¥°Ê²¼¤ÏÆ°ºîÎã¤Ç¤¢¤ë¡¥

# let x = 1
  let y = x + 1;;
val x = 1
val y = 2
Exercise 6  [Æñ°×ÅÙ 1] ¥Ð¥Ã¥Á¥¤¥ó¥¿¥×¥ê¥¿¤òºîÀ®¤»¤è¡¥¶ñÂÎŪ¤Ë¤Ï miniml ¥³¥Þ¥ó¥É¤Î°ú¿ô¤È¤· ¤Æ ¥Õ¥¡¥¤¥ë̾¤ò¤È¤ê¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò²ò¼á¤·¡¤·ë²Ì¤ò¥Ç¥£¥¹¥×¥ì¥¤ ¤Ë½ÐÎϤ¹¤ë¤è¤¦¤ËÊѹ¹¤»¤è¡¥¤Þ¤¿¡¤¥³¥á¥ó¥È¤ò̵»ë¤¹¤ë¤è¤¦¼ÂÁõ¤»¤è¡¥
Exercise 7  [Æñ°×ÅÙ 2] and¤ò»È¤Ã¤ÆÊÑ¿ô¤òƱ»þ¤Ë¤Õ¤¿¤Ä°Ê¾åÀë¸À¤Ç¤­¤ë¤è¤¦¤Ë let ¼°¡¦Àë¸À¤ò³ÈÄ¥¤»¤è¡¥Î㤨¤Ð°Ê²¼¤Î¥×¥í¥°¥é¥à

let x = 100
and y = x in x+y
¤Î¼Â¹Ô·ë²Ì¤Ï 200 ¤Ç¤Ï¤Ê¤¯¡¤(x¤¬Âç°è´Ä¶­¤Ç 10¤Ë«Çû¤µ¤ì ¤Æ¤¤¤ë¤Î¤Ç) 110 ¤Ç¤¢¤ë¡¥

Previous Up Next