所以,我正在尝试学习 Lisp,但在定义字符串是什么时遇到了一个问题。
我正在阅读 Paul Graham 的 ANSI Common Lisp,在这本书中它指出字符串是向量或一维数组。
所以,我创建了一个字符串:
(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*)
返回真
不同于:
(simple-vector-p *my-string*)
返回 false。
请注意 (simple-vector-p my-vec)
也将返回 true,这确认 make-array
创建了一个简单向量。
关于vector - 如果 lisp 中的字符串是向量,为什么我不能使用 svref 访问第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26164417/