X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?a=blobdiff_plain;f=exercises%2Fassignment8-9.mdwn;h=529811cde8a3e1c21a2ccd7a5d857c5251fcb40c;hb=286b0a896649fa423b3dd98b36f999a2bcc502ef;hp=e6d24837152d055c60418c522bf980dd800a13b1;hpb=df299f52afabeb6cadc607443b16e93a3aadb727;p=lambda.git diff --git a/exercises/assignment8-9.mdwn b/exercises/assignment8-9.mdwn index e6d24837..529811cd 100644 --- a/exercises/assignment8-9.mdwn +++ b/exercises/assignment8-9.mdwn @@ -17,23 +17,23 @@ relationships, as in See her 1999 paper for details. Here is [[code for the arithmetic tree Chris presented in week 8|code/arith1.ml]]. It computes -`\x. (+ 1 (* (/ 6 x) 4))`. Your task is to modify it to compute -`\x y. (+ 1 (* (/ 6 x) y))`. You will need to modify five lines. +`\n. (+ 1 (* (/ 6 n) 4))`. Your task is to modify it to compute +`\n m. (+ 1 (* (/ 6 n) m))`. You will need to modify five lines. The first one is the type of a boxed int. Instead of `type num = int -> int`, you'll need type num = int -> int -> int The second and third are the definitions of `mid` and `map2`. The fourth -is the one that encodes the variable `x`, the line that begins `(Leaf -(Num (fun x -> ...`. The fifth line you need to modify is the one -that replaces "4" with "y". When you have these lines modified, +is the one that encodes the variable `n`, the line that begins `(Leaf +(Num (fun n -> ...`. The fifth line you need to modify is the one +that replaces "4" with "m". When you have these lines modified, you should be able to execute the following expression: # match eval t2 with Leaf (Num f) -> f 2 4;; - : int = 13 -2. Based on the evaluator code from the assignment from week 7, and what you've learned about the Reader monad, +2. Based on [[the evaluator code from assignment 7|/exercises/assignment7/#index3h2]], and what you've learned about the Reader monad, enhance the arithmetic tree code to handle an arbitrary set of free variables. Don't use Juli8 libraries for this; just do it by hand. Return to the original code (that is, before the modifications required by the previous problem). @@ -137,7 +137,7 @@ Return to the original code (that is, before the modifications required by the p -- substitute your own choices for the type Env and value env0 let { xx :: ReaderT Env Maybe Int; xx = return 1 } in runReaderT xx env0 - Okay, here are some questions about various monad transformers. Use OCaml to help you answer them. Which combined monad has the type of an optional list (that is, either `None` or `Some [...]`): an Option transformer wrapped around an underlying List monad, or a List transformer wrapped around an underlying Option monad? Which combined monad has the type of a function from `store`s to a pair `('a list, store)`: a List transformer wrapped around an underlying State monad or a State transformer wrapped around an underlying List monad? + Okay, here are some questions about various monad transformers. Use OCaml or Haskell to help you answer them. Which combined monad has the type of an optional list (that is, either `None` or `Some [...]`): an Option transformer wrapped around an underlying List monad, or a List transformer wrapped around an underlying Option monad? Which combined monad has the type of a function from `store`s to a pair `('a list, store)`: a List transformer wrapped around an underlying State monad or a State transformer wrapped around an underlying List monad? The last two problems are non-monadic.