<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Sep 8, 2014 at 9:51 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 class="">On Sep 2, 2014, at 11:45 AM, Daniel Bastos wrote:<br>
<br>
> A candidate for a solution.<br>
><br>
> Exercise 20.1.1. Assume the Definitions window in DrScheme contains<br>
> (define (f x) x). Identify the values among the following expressions:<br>
><br>
> (1) (cons f empty)<br>
> (2) (f f)<br>
> (3) (cons f (cons 10 (cons (f 10) empty)))<br>
><br>
> Explain why they are values and why the remaining expressions are not<br>
> values.<br>
><br>
> Solution. First we consider (1). Here's the relevant part of the<br>
> grammar.<br>
><br>
>  <lst> = empty | (cons <val> <lst>)<br>
><br>
>  <val> = <boo> | <sym> | <num> | empty | <lst><br>
>  | <var> (names of defined functions)<br>
>  | <prm><br>
><br>
> So (1) is a value because it is <lst> of the form (cons <var> empty),<br>
> where f is <var> because it is a defined function.<br>
><br>
> Let's consider (3) before (2). (3) is a list of either <var> or <num>,<br>
> so (3) is <val> as well.<br>
<br>
</span>You checked only one half of the value-grammar for lst. Check the other half, too. Report back whether you want to change the answer or not. -- Matthias<br></blockquote><div><br></div><div>I want to change it completely. I'm not very sure about what's going on. Perhaps the other half would be this: since <var> is a value in this context because f is in fact a defined function, then we get (cons <val> <lst>) because empty is a <lst> too and then (cons <val> <lst>) = <lst> due to the definition of <lst>. Since any <lst> is a <val>, we get a value. (Is that what you meant with 'check the other half'?)<br></div><div><br></div><div>Here's my new complete attempt at the problem. (I ended up saying they're all values, due to the fact that we know f and f always yields values.)</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 the relevant part of the grammar.</div><div><br></div><div>  <exp> = <var></div><div>  | <prm></div><div>  | (<exp> <exp> ...<exp>)</div><div><br></div><div>Again, we start with (2) and apply a series of substitutions.</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>However, (<exp> <exp>) is not by definition a value. It is an </div><div>expression which may or may not /have/ a value. We know the </div><div>definition of f, however, which tells us that it behaves like</div><div>the identity function. So the evaluation of that (<exp> <exp>)</div><div>yields a function, which is a value. We end with </div><div><br></div><div>  = <val></div><div><br></div><div>Therefore (2) is 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>Now again, the whole expressions depends on the application (<exp> <exp>),</div><div>which may or may not have a value. Since that is a call to f, the</div><div>identity function, we know it returns its argument, so</div><div><br></div><div>  = (cons <var> (cons <num> (cons <num> <lst>)))</div><div>  = (cons <var> (cons <num> (cons <val> <lst>))) ;; <num> is a <val></div><div>  = (cons <var> (cons <num> <lst>))              ;; definition of <lst></div><div>  = (cons <var> (cons <val> <lst>))              ;; <num> is a <val></div><div>  = (cons <var> <lst>)                           ;; definition of <lst></div><div>  = (cons <val> <lst>)                           ;; <var> is a <val></div><div>  = <lst>                                        ;; definition of <lst></div><div>  = <val>                                        ;; <lst> is a <val></div><div><br></div><div>Therefore (3) is a value.</div></div><div><br></div><div>Thanks for your attention.</div></div></div></div>