<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Where do you see declared the in the specs? I see "values returned by form".<div><br><div><br><div><div>On Oct 18, 2009, at 1:19 PM, Ron Garret wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 18, 2009, at 4:05 AM, Taoufik Dachraoui wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Sorry but I have to insist.<div><br></div></div></blockquote><div><br></div><div>Insist all you want.  That won't make you right.</div></div></div></blockquote>Agree, but I insist because I believe that you missunderstood my concern, I may be wrong</div><div>and I may be right, clear, precise and correct answers may convince me.</div><div><br></div><div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>In the CL specs </div><div><br></div><div><div><span class="Apple-style-span" style="font-family: Times; "><b><font class="Apple-style-span" face="Helvetica"><span class="Apple-style-span" style="font-weight: normal; ">"</span></font><a rel="DEFINITION" href="file:///usr/local/doc/HyperSpec/Body/s_the.htm#the">the</a></b> specifies that the <a rel="DEFINITION" href="file:///usr/local/doc/HyperSpec/Body/26_glo_v.htm#value"><i>values</i></a>[1a] returned by <i>form</i> are of the <a rel="DEFINITION" href="file:///usr/local/doc/HyperSpec/Body/26_glo_t.htm#type"><i>types</i></a> specified by <i>value-type</i>. </span></div><div><span class="Apple-style-span" style="font-family: Times; ">The consequences are undefined if any <i>result</i> is not of the declared type."</span></div></div><div><br></div><div>It is clear that (THE type expr)  specifies the the returned value of expr is of type type.</div><div><br></div></div></blockquote><div><br></div><div>No, this is not clear.  The only thing that is clear is just what it says, that if the result is not of the declared type then the consequences are undefined.  In CCL, for example:</div><div><br></div></div></div></blockquote>Where do you see "not of the declared"? I see "the values returned by form".</div><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div><div>? (the fixnum 1.2)</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form: Type declarations violated in (THE FIXNUM 1.2)</div><div>1.2</div></div></div><div><br></div><div>But this is a red herring.  None of this has anything to do with the warning you are seeing.</div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Again the example:</div><div><br></div><div><div>? (setf z 1)</div><div>1</div><div>? (the fixnum z)</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form: Undeclared free variable Z</div><div>1</div><div>? z</div><div>1</div><div>? (the fixnum 1)</div><div>1</div><div>?</div><div><br></div><div>As you can see, after the SETF z has a value of 1 and (THE fixnum 1) does not raise a </div><div>warning but  (THE fixnum z) does, this means to me that the THE operator does not </div><div>merely uses the returned value of z but has something too say about z, and this is wrong</div><div>I believe.</div></div></div></blockquote><div><br></div><div>The exact same thing happens with other operators:</div><div><br></div></div></div></blockquote>But do you agree that the z defined by SETF is a lexical variable?</div><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div>? (setf x 1)</div><div>1</div><div>? ((lambda () x))</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form: Undeclared free variable X</div><div>1</div><div>? ((lambda () 1))</div><div>1</div><div>? (let ((y x)) y)</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form: Undeclared free variable X</div><div>1</div><div>? (let ((y 1)) y)</div><div>1</div><div><br></div><div><br></div><div>It has nothing to do with THE, it has to do with whether a reference to an undeclared free variable is passed to the compiler, which is what generates these warnings.  Again: this has nothing to do with THE -- except insofar as THE is one construct (among many) that causes the compiler to be invoked.</div><div><br></div></div></div></div></blockquote>It remains that the THE operator as implemented does not follow the specs.</div><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div>rg</div><div><br></div></div></div></div></blockquote></div><br></div><div>Taoufik</div></div></body></html>