X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=assignment10.mdwn;h=087b66a4a53a99fca9b039620a270bb81d1f01fe;hp=77449d5b886076bf84e7726c420284a81157f7e7;hb=e5f582330945c265a211cbebb30bc06a94f3ed91;hpb=035bb2f5a22e47a9b7f2d7059563e35eef47ff62 diff --git a/assignment10.mdwn b/assignment10.mdwn index 77449d5b..087b66a4 100644 --- a/assignment10.mdwn +++ b/assignment10.mdwn @@ -29,7 +29,7 @@ Of course, if you need help or want us to review your efforts, we'll be glad to As Ken Shan points out, this is an instance of the algorithm for converting name/year citations (like 'see Montague 1970') to numerals corresponding to their position in the - bibliography ('see [24]'). Except that bibliograpic numerals + bibliography ('see [24]'). Except that bibliographic numerals don't start with zero. Give some thought to efficiency: there are straightforward @@ -73,7 +73,7 @@ Of course, if you need help or want us to review your efforts, we'll be glad to fun s -> M.bind (u s) (fun (a, s') -> f a s');; let elevate (m : 'a M) : 'a stateT(M) = - fun s -> Wrapped.bind w (fun a -> Wrapped.unit (a, s));; + fun s -> M.bind w (fun a -> M.unit (a, s));; That won't compile in OCaml because we use the `M`s in a way that's intuitive but unrecognized by OCaml. What OCaml will recognize is more complex. Don't worry; you won't need to code a general implementation of StateT. @@ -114,6 +114,18 @@ Of course, if you need help or want us to review your efforts, we'll be glad to What would be a helper function you could supply as a `k` that would report `#t` iff the original `lst` contained more instances of some symbol than non-instances? + + 5. Now we define a function `insert-co` which has the following behavior. It accepts as arguments three symbols, a list, and a handler. The first symbol is inserted before (to the left of) any occurrences in the list of the second symbol, and after (to the right of) any occurrences of the third symbol. The handler is then called with three arguments: the new list (with the insertions made), the number of "to-the-left" insertions that were made, and the number of "to-the-right" insertions that were made. Here is a partial implementation. You should fill in the blanks. If you get stuck, you can consult the walkthough in _The Little Schemer_, or talk to us. @@ -130,6 +142,20 @@ Of course, if you need help or want us to review your efforts, we'll be glad to (else (insert-co new before after (cdr lst) (lambda (new-lst lefts rights) ________)))))) + + 6. Go back to the "abSd" problem we presented in [[From List Zippers to Continuations]]. Consider the "tc" solution which uses explicitly passed continuations. Try to reimplement this using reset