From: Chris Date: Thu, 12 Mar 2015 01:38:05 +0000 (-0400) Subject: edits X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=18b3eb5a07c8ad23c8d17c8e0d859c9d9516eab3;p=lambda.git edits --- diff --git a/exercises/_assignment7.mdwn b/exercises/_assignment7.mdwn index d351b1b5..587a1e0f 100644 --- a/exercises/_assignment7.mdwn +++ b/exercises/_assignment7.mdwn @@ -24,27 +24,9 @@ does not perform reductions in those positions. -3. In the previous homework, one of the techniques for controlling -evaluation order was wrapping expressions in a `let`: `let x = blah in -foo`, you could be sure that `blah` would be evaluated by the time the -interpreter considered `foo` (unless you did some fancy footwork with -thunks). That suggests the following way to try to arrive at eager -evaluation in our Haskell evaluator for CL: - - reduce4 t = case t of - I -> I - K -> K - S -> S - FA a b -> - let b' = reduce4 b in - let a' = reduce4 a in - let t' = FA a' b' in - if (is_redex t') then reduce4 (reduce_one_step t') - else t' - -Will this work? That is, will `reduce4 (FA (FA K I) skomega)` go into -an infinite loop? Run the code to find out, if you must, but write -down your guess (and your rationale) first. - - +3. Converting to lambdas. Using the type definitions you developed in +homework 5, rebuild the evaluator in OCaml to handle the untyped +lambda calculus. Making use of the occurs_free function you built, +we'll provide a function that performs safe substitution. +