如果lisp中的字符串是向量,为什么我不能使用svref访问第一个元素?

所以,我正在尝试学习Lisp,我在定义String是什么时遇到了一个问题.

我正在阅读Paul Graham的ANSI Common Lisp,在本书中它指出String是一个向量或一维数组.

所以,我创建一个String:

(defvar *my-string* "abc")

然后我可以这样访问my-string的第一个值:

(aref *my-string* 0)

但如果它是一个向量,为什么我不能这样访问该元素:

(svref *my-string* 0)

我的意思是,当我以这种方式创建矢量时:

(defvar my-vec (make-array 4 :initial-element 1))

我可以使用svref访问第一个元素:

(svref my-vec 0) ; returns 1

我在String上尝试使用svref时忘了添加错误

“值”abc“不属于类型(SIMPLE-ARRAY T(*)).”

解决方法

字符串是一个向量,但它不是一个简单的向量. svref采用简单向量作为第一个参数.

您可以致电:

(vector-p *my-string*)

返回true

不同于:

(simple-vector-p *my-string*)

返回false.

请注意,(simple-vector-p my-vec)也将返回true,这确认了make-array创建了一个简单向量.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...