所以,我正在尝试学习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
“值”abc“不属于类型(SIMPLE-ARRAY T(*)).”
解决方法
字符串是一个向量,但它不是一个简单的向量.
svref采用简单向量作为第一个参数.
您可以致电:
(vector-p *my-string*)
返回true
不同于:
(simple-vector-p *my-string*)
返回false.
请注意,(simple-vector-p my-vec)也将返回true,这确认了make-array创建了一个简单向量.