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

前端之家收集整理的这篇文章主要介绍了如果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创建了一个简单向量.

猜你在找的Java相关文章