加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如果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创建了一个简单向量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读