From 18b3eb5a07c8ad23c8d17c8e0d859c9d9516eab3 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 11 Mar 2015 21:38:05 -0400 Subject: [PATCH] edits --- exercises/_assignment7.mdwn | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) 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. + -- 2.11.0