X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=topics%2F_manipulating_trees_with_monads.mdwn;h=1a4a1dd1bba534ade11e010bd6394611a65771da;hp=0d9e33df3425822ec12e1b4b8aab11fa2594475c;hb=5c25429aa8ed3c65ab1cb67a244a3b21919f079c;hpb=c6cd98eb0d91c5bd5c53efc037a34a41f08eb738 diff --git a/topics/_manipulating_trees_with_monads.mdwn b/topics/_manipulating_trees_with_monads.mdwn index 0d9e33df..1a4a1dd1 100644 --- a/topics/_manipulating_trees_with_monads.mdwn +++ b/topics/_manipulating_trees_with_monads.mdwn @@ -375,87 +375,6 @@ able to simulate any other monad (Google for "mother of all monads"). If you want to see how to parameterize the definition of the `tree_monadize` function, so that you don't have to keep rewriting it for each new monad, see [this code](/code/tree_monadize.ml). -The idea of using continuations to characterize natural language meaning ------------------------------------------------------------------------- - -We might a philosopher or a linguist be interested in continuations, -especially if efficiency of computation is usually not an issue? -Well, the application of continuations to the same-fringe problem -shows that continuations can manage order of evaluation in a -well-controlled manner. In a series of papers, one of us (Barker) and -Ken Shan have argued that a number of phenomena in natural langauge -semantics are sensitive to the order of evaluation. We can't -reproduce all of the intricate arguments here, but we can give a sense -of how the analyses use continuations to achieve an analysis of -natural language meaning. - -**Quantification and default quantifier scope construal**. - -We saw in the copy-string example ("abSd") and in the same-fringe example that -local properties of a structure (whether a character is `'S'` or not, which -integer occurs at some leaf position) can control global properties of -the computation (whether the preceeding string is copied or not, -whether the computation halts or proceeds). Local control of -surrounding context is a reasonable description of in-situ -quantification. - - (1) John saw everyone yesterday. - -This sentence means (roughly) - - forall x . yesterday(saw x) john - -That is, the quantifier *everyone* contributes a variable in the -direct object position, and a universal quantifier that takes scope -over the whole sentence. If we have a lexical meaning function like -the following: - - let lex (s:string) k = match s with - | "everyone" -> Node (Leaf "forall x", k "x") - | "someone" -> Node (Leaf "exists y", k "y") - | _ -> k s;; - -Then we can crudely approximate quantification as follows: - - # let sentence1 = Node (Leaf "John", - Node (Node (Leaf "saw", - Leaf "everyone"), - Leaf "yesterday"));; - - # tree_monadize lex sentence1 (fun x -> x);; - - : string tree = - Node - (Leaf "forall x", - Node (Leaf "John", Node (Node (Leaf "saw", Leaf "x"), Leaf "yesterday"))) - -In order to see the effects of evaluation order, -observe what happens when we combine two quantifiers in the same -sentence: - - # let sentence2 = Node (Leaf "everyone", Node (Leaf "saw", Leaf "someone"));; - # tree_monadize lex sentence2 (fun x -> x);; - - : string tree = - Node - (Leaf "forall x", - Node (Leaf "exists y", Node (Leaf "x", Node (Leaf "saw", Leaf "y")))) - -The universal takes scope over the existential. If, however, we -replace the usual `tree_monadizer` with `tree_monadizer_rev`, we get -inverse scope: - - # tree_monadize_rev lex sentence2 (fun x -> x);; - - : string tree = - Node - (Leaf "exists y", - Node (Leaf "forall x", Node (Leaf "x", Node (Leaf "saw", Leaf "y")))) - -There are many crucially important details about quantification that -are being simplified here, and the continuation treatment used here is not -scalable for a number of reasons. Nevertheless, it will serve to give -an idea of how continuations can provide insight into the behavior of -quantifiers. - - The Tree monad ==============