Skip to content

Latest commit

 

History

History
66 lines (65 loc) · 2.13 KB

TODO.md

File metadata and controls

66 lines (65 loc) · 2.13 KB

DONE - FIX PARSING ORDER IN APPLICATION

let rec iter = fun n f d -> if n = 0 then d else iter (n - 1) (f) (f d) in let power = fun i n -> let itim = fun a -> a * i in iter (n) (itim) (1) in power 3 19

AST EQUIVALENT

(Letrec ("iter",
   (Lambda (["n"; "f"; "d"],
      (IfThenElse (Binop(Eq,(Symbol "n"), (NumInt 0))), (Symbol "d"),
         (Apply ((Symbol "iter"),
            [Binop(Sub,(Symbol "n"), (NumInt 1)));
              (Apply ((Symbol "f"), [(Apply ((Symbol "f"), [(Symbol "d")]))]
                 ))
              ]
            ))
         ))
      )),
   (Let (
      [("power",
        (Lambda (["i"; "n"],
           (Let (
              [("itim", (Lambda (["a"], Binop(Mult,(Symbol "a"), (Symbol "i"))))))
                ],
              (Apply ((Symbol "iter"),
                 [(Apply ((Symbol "n"),
                     [(Apply ((Symbol "itim"), [(NumInt 1)]))]))
                   ]
                 ))
              ))
           )))
        ],
      (Apply ((Symbol "power"), [(NumInt 3); (NumInt 2)]))))
   ))

Should be equal to

let rec iter = fun n f d -> if n = 0 then d else iter (n - 1) (f) (f d) in let
power = fun i n -> let itim = fun a -> a * i in iter (n) (itim) (1) in power 3
19

AST EQUIVALENT

(Letrec ("iter",
   (Lambda (["n"; "f"; "d"],
      (IfThenElse (Binop(Eq,(Symbol "n"), (NumInt 0))), (Symbol "d"),
         (Apply ((Symbol "iter"),
            [Binop(Sub,(Symbol "n"), (NumInt 1))); (Symbol "f");
              (Apply ((Symbol "f"), [(Symbol "d")]))]
            ))
         ))
      )),
   (Let (
      [("power",
        (Lambda (["i"; "n"],
           (Let (
              [("itim", (Lambda (["a"], Binop(Mult,(Symbol "a"), (Symbol "i"))))))
                ],
              (Apply ((Symbol "iter"),
                 [(Symbol "n"); (Symbol "itim"); (NumInt 1)]))
              ))
           )))
        ],
      (Apply ((Symbol "power"), [(NumInt 3); (NumInt 19)]))))
   ))