From: Christophe R. <cs...@ca...> - 2005-05-30 08:41:14
|
"Paul F. Dietz" <di...@dl...> writes: > * (LET ((X (MAKE-ARRAY 3 :INITIAL-ELEMENT 0 :ELEMENT-TYPE '(INTEGER 0 2)))) > (DECLARE (OPTIMIZE SAFETY)) > (SETF (AREF X 0) 3) > (AREF X 0)) > > 3 > > According to the page for TYPE: > > "Within the lexical scope of an array type declaration, > all references to array elements are assumed to satisfy > the expressed array element type (as opposed to the > upgraded array element type). A compiler can treat the > code within the scope of the array type declaration as > if each access of an array element were surrounded by > an appropriate THE form." Um, yes, but you haven't declared an array type anywhere. If you actually insert a declaration, then you get the type error you might be expecting, but formally your code does not contain a type error, because the array construction explicitly means _exactly the same_ as the construction with an element type of (upgraded-array-element-type '(integer 0 2)) which includes 3. Cheers, Christophe |