common-lisp - 通用 Lisp : how to access a row of a certain multi-dimension array?

标签 common-lisp

假设我写了

(setf s (make-array (list 9 9) :element-type 'bit))

所以 s 是一个 9x9 的位矩阵。

我想得到 s 的第一行。我怎么得到它?

我可以做到以下几点:
(setf s (make-array 9 
          :element-type 'array 
          :initial-element 
          (make-array 9 :element-type 'bit)))

并通过 (svref s 0) 访问第一行。
但我想知道是否有内置方式。
(并且 2 dim 数组似乎分配了更少的字节)。

最佳答案

(defun array-slice (arr row)
    (make-array (array-dimension arr 1) 
      :displaced-to arr 
       :displaced-index-offset (* row (array-dimension arr 1))))

这仅适用于行切片,IIRC 不能复制数组。写入切片将修改原始数组。

关于common-lisp - 通用 Lisp : how to access a row of a certain multi-dimension array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327237/

相关文章:

lisp - 将字符串列表转换为 Common Lisp 中的整数列表

list - 将列表缩减为其元素之差的总和

scheme - 如何将函数复制到新符号?

common-lisp - 如何用填充指针清除字符串?

common-lisp - 为什么ql :quickload ignores errors but asdf:load-system is not?

common-lisp - 基于 Common Lisp 对象系统类定义中的其他槽值初始化槽

lisp - 如何在 Common Lisp 中返回变量的值和名称

common-lisp - 为什么 lambda 返回全局变量而不是局部变量?

lisp - 比较 Lisp 中的列表

error-handling - SBCL 绕过调试器并打印错误以在其他环境中显示?