【发布时间】:2011-10-20 14:56:50
【问题描述】:
在玩 Lisp 时,我注意到以下几点:
(subtypep 'string '(array character)) ==> NIL, T
(subtypep '(array character) 'string) ==> NIL, T
同时
(typep (make-string x) '(array character)) ==> T
(typep (make-array x :element-type :character) 'string) ==>T
对于任何 x 值。
这意味着“subtypep”表示'string和'(数组字符)是两种不同的类型,而“typep”表示一种类型的任何实例也是另一种类型的实例( 1)
除非 (1) 不正确-请举例说明-,为什么会发生这种情况?我觉得很难理解,因为我假设一个类型在概念上不能没有它的实例而存在,也就是说,它是由它的实例定义的:它是具有一组特定属性的对象的类(在数学意义上)。它是否正确?
编辑:正如正确指出的那样,(array character) 不一定是string 的子类型,原因很简单,因为存在多维字符数组。但我仍然无法想象没有(array character) 类型的string 实例。
【问题讨论】:
标签: types lisp common-lisp