作者在用 SBCL(Common Lisp 实现)时撞上一个意外:一个结构体声明了 (simple-array (unsigned-byte 16)) 类型的槽,默认值 #1A() 与初始值 #1A(1 2 3) 都通不过类型检查。原因是字面量 #1A() 被推断为 (simple-vector 0)、#1A(1 2 3) 为 (simple-vector 3),二者都不是受约束数组的子类型。作者推测这与编译器可按元素类型优化存储、从而不便与 simple-vector 比较有关。