<html><head></head><body 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><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><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>? (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>rg</div><div><br></div></div></div></body></html>