<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. &nbsp;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&nbsp;</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>&nbsp;specifies that the&nbsp;<a rel="DEFINITION" href="file:///usr/local/doc/HyperSpec/Body/26_glo_v.htm#value"><i>values</i></a>[1a] returned by&nbsp;<i>form</i>&nbsp;are of the&nbsp;<a rel="DEFINITION" href="file:///usr/local/doc/HyperSpec/Body/26_glo_t.htm#type"><i>types</i></a>&nbsp;specified by&nbsp;<i>value-type</i>.&nbsp;</span></div><div><span class="Apple-style-span" style="font-family: Times; ">The consequences are undefined if any&nbsp;<i>result</i>&nbsp;is not of the declared type."</span></div></div><div><br></div><div>It is clear that (THE type expr) &nbsp;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. &nbsp;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. &nbsp;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>; &nbsp; 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. &nbsp;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>; &nbsp; 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&nbsp;</div><div>warning&nbsp;but &nbsp;(THE fixnum z) does, this means to me that the THE operator does not&nbsp;</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>; &nbsp; 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>; &nbsp; 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. &nbsp;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>