微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/java/127660.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐