<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Sep 12, 2014 at 6:43 PM, </div><div class="gmail_quote">Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:</div><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><br>
On Sep 12, 2014, at 4:40 PM, Daniel Bastos <<a href="mailto:dbastos@toledo.com" target="_blank">dbastos@toledo.com</a>> wrote:<br>
<br>
> Again, we start with (2) and apply a series of substitutions.<br>
><br>
>     (f f)<br>
>   = (<var> <var>) ;; since f is a <var><br>
>   = (<exp> <exp>) ;; since <var> is a subset of <exp><br>
><br>
> However, (<exp> <exp>) is not by definition a value. It is an<br>
> expression which may or may not /have/ a value. We know the<br>
> definition of f, however, which tells us that it behaves like<br>
> the identity function. So the evaluation of that (<exp> <exp>)<br>
> yields a function, which is a value. We end with<br>
><br>
>   = <val><br>
><br>
> Therefore (2) is a value<br>
<br>
</span>Is there a difference between the statements<br>
<br>
 "Daniel is a hat."<br>
<br>
and<br>
<br>
 "Daniel has a hat."<br>
<br>
or do they really mean the same thing?<br></blockquote><div><br></div><div>There's a difference.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">In this spirit, is there a difference between the statement<br>
<br>
 "(f f) is a value."<br>
<br>
and<br>
<br>
 "(f f) has a value."<br>
<br>
or do they really mean the same thing?<br></blockquote><div><br></div><div>There's a difference. The analogy is good. (I do remember having read this analogy in the book, though I can't seem to find it right now.)</div><div><br></div><div>Here's my final rewrite. Feel free to scrutinize it. (BTW, thanks for your attention.)</div><div><br></div><div><div>Exercise 20.1.1. Assume the Definitions window in DrScheme contains</div><div>(define (f x) x). Identify the values among the following expressions:</div><div><br></div><div> (1) (cons f empty)</div><div> (2) (f f)</div><div> (3) (cons f (cons 10 (cons (f 10) empty)))</div><div><br></div><div>Explain why they are values and why the remaining expressions are not</div><div>values.</div><div><br></div><div>Solution. A value is anything of the form</div><div><br></div><div>  <val> = <boo> | <sym> | <num> | empty | <lst></div><div>  | <var> (names of defined functions)</div><div>  | <prm></div><div><br></div><div>where <lst> is of the form</div><div><br></div><div>  <lst> = empty | (cons <val> <lst>).</div><div><br></div><div>Now we start with (1) and apply a series of substitutions based on the</div><div>definitions we have.</div><div><br></div><div>    (cons f empty)</div><div>  = (cons <var> <lst>)  ;; since f is a <var></div><div>  = (cons <var> <lst>)  ;; since empty is a <lst></div><div>  = (cons <val> <lst>)  ;; since <var> is a subset of <val></div><div>  = <lst>               ;; definition of <lst></div><div>  = <val>               ;; definition of <val></div><div><br></div><div>Therefore (1) is a value.</div><div><br></div><div>Next we consider (2). Here's a relevant part of the grammar for (2).</div><div><br></div><div>  <exp> = <var></div><div>  | <prm></div><div>  | (<exp> <exp> ...<exp>)</div><div><br></div><div>Start with (2)...</div><div><br></div><div>    (f f)</div><div>  = (<var> <var>) ;; since f is a <var></div><div>  = (<exp> <exp>) ;; since <var> is a subset of <exp></div><div><br></div><div>Now (<exp> <exp>) is not by definition a value. Expressions may have</div><div>values, but they're not values. (Daniel may have a hat, but Daniel is</div><div>not a hat.)</div><div><br></div><div>Therefore (2) is not a value.</div><div><br></div><div>Now (3).</div><div><br></div><div>    (cons f (cons 10 (cons (f 10) empty)))</div><div>  = (cons <var> (cons <num> (cons (<var> <num>) <lst>)))</div><div><br></div><div>The whole expression depends on the application (<exp> <exp>),</div><div>which may or may not have a value. Since we know f, we know it has a value,</div><div>but it /is not/ a value.</div><div><br></div><div>Therefore (3) is not a value.</div></div></div></div></div>