assignment7 tweaks
[lambda.git] / hints / assignment_7_hint_3.mdwn
index 7617922..be018de 100644 (file)
@@ -17,7 +17,7 @@
 
 *      In def 2.5, GS&V say the denotation of an e-type constant <code>&alpha;</code> wrt a discourse possibility `(r, h, w)` is whatever entity the world `w` associates with <code>&alpha;</code>. Since we don't have worlds, this will just be an entity.
 
-       They say the denotation of a predicate is whatever extension the world `w` associates with the predicate. Since we don't have worlds, this will just be an extension.
+       They say the denotation of a predicate is whatever extension the world `w` associates with the predicate. Since we don't have worlds, this will just be an extension, or a function from entities to `bool`s.
 
        They say the denotation of a variable is the entity which the store `h` assigns to the index that the assignment function `r` assigns to the variable. In other words, if the variable is `'x'`, its denotation wrt `(r, h, w)` is `h[r['x']]`. In our OCaml implementation, that will be `List.nth h (r 'x')`.
 
 
        we'll just talk about \[[expression]] and let that be a monadic value, implemented in part by a function that takes `(r, h)` as an argument.
 
-       More specifically, \[[expression]] will be a set of `'a dpm`s, where `'a` is the appropriate type for *expression*. Each `'a dpm` is implemented by a function that takes `(r, h)` as an argument.
-
 *      In def 2.7, GS&V talk about an operation that takes an existing set of discourse possibilities, and *extends* each member in the set by (i) allocating a new location in the store, (ii) putting some entity `d` from the domain in that location, and (iii) assigning variable `x` to that location in the store.
 It will be useful to have a shorthand way of referring to this operation:
 
                let new_peg_and_assign (var_to_bind : char) (d : entity) =
                        fun ((r, h) : assignment * store) ->
                                (* first we calculate an unused index *)
-                               let newindex = List.length h
-                               (* next we store d at h[newindex], which is at the very end of h *)
+                               let new_index = List.length h
+                               (* next we store d at h[new_index], which is at the very end of h *)
                                (* the following line achieves that in a simple but inefficient way *)
                                in let h' = List.append h [d]
-                               (* next we assign 'x' to location newindex *)
-                               in let r' = fun v ->
-                                       if v = var_to_bind then newindex else r v
-                               in (r',h')
+                               (* next we assign 'x' to location new_index *)
+                               in let r' = fun var ->
+                                       if var = var_to_bind then new_index else r var
+                               (* the reason for returning true as an initial element will emerge later *)
+                               in (true, r', h')
 
-*      Is that enough? If not, here are some [more hints](/hints/assignment_7_hint_4).
+*      Is that enough? If not, here are some [more hints](/hints/assignment_7_hint_4). But try to get as far as you can on your own.