Store-passing interpreter - Exercise 4.12

Skip to first unread message


Sep 1, 2013, 5:56:25 PM9/1/13
Hi guys, I have a question regarding the store passing interpreter example given for exercise 4.6.

Here's the code from the book:

value-of : Exp × Env × Sto → ExpVal
(define value-of
  (lambda (exp env store)
    (cases expression exp
      (const-exp (num)
                 (an-answer (num-val num) store))
      (var-exp (var)
                (apply-store store (apply-env env var)) ;;(1)
      (if-exp (exp1 exp2 exp3)
              (cases answer (value-of exp1 env store)
                (an-answer (val new-store)
                           (if (expval->bool val)
                               (value-of exp2 env new-store)
                               (value-of exp3 env new-store)))))
      (deref-exp (exp1)
                 (cases answer (value-of exp1 env store)
                   (an-answer (v1 new-store)
                              (let ((ref1 (expval->ref v1)))
                                (an-answer (deref ref1) new-store))))) ;;(2)

(1) apply-store? why should we call such a function here? For a var-exp the solution should be (an-answer (apply-env env var) store). 
(2) I though the purpose of the entire exercise was to pass the store around, but from this line it seems that the store is still implemented as a global variable, in fact it is not passed to deref. So what's the use of being so careful as to what store is being returned, we could just return store.. it's global!

Does it make sense?

Does anyone want to share their thoughts about this?

Thank you all!


Yukang Chen

Sep 13, 2013, 8:42:41 PM9/13/13
Yes, I am also confusing about this.... 
I try to search apply-store in all the books, but haven't got the definition.


Sep 21, 2013, 5:33:36 AM9/21/13
Hi Chen, yes I think apply-store has nothing to do with a solution in the case of a var-exp for the store-passing interpreter.

Mitchell Wand

Sep 24, 2013, 6:09:57 PM9/24/13
to eopl3
Sorry to be so slow in responding.

From Section 4.1:

"We model memory as a finite map from locations to a set of values called the storable values.  For historical reasons, we call this the store."

We represent such a map as some data structure, just as we represented environments as a data structure.   We use apply-store to look things up in this map, just like we used apply-env.

This way the interpreter does not make a commitment to the representation of the store, just like using apply-env allows the interpreter to avoid committing itself to any particular representation of the environment. 

Hope that helps.

--Prof. Wand

You received this message because you are subscribed to the Google Groups "EOPL3" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
To post to this group, send email to
Visit this group at
For more options, visit

Reply all
Reply to author
0 new messages