如果lisp中的字符串是向量,为什么我不能使用svref访问第一个元素
发布时间:2020-12-14 23:21:33 所属栏目:Java 来源:网络整理
导读:所以,我正在尝试学习Lisp,我在定义String是什么时遇到了一个问题. 我正在阅读Paul Graham的ANSI Common Lisp,在本书中它指出String是一个向量或一维数组. 所以,我创建一个String: (defvar *my-string* "abc") 然后我可以这样访问my-string的第一个值: (are
所以,我正在尝试学习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创建了一个简单向量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |