make-array 函数的完整语法
make-array 函数接受许多其他参数。让我们看看这个函数的完整语法 -
make-array dimensions :element-type :initial-element :initial-contents :adjustable :fill-pointer :displaced-to :displaced-index-offset
除了维度参数之外,所有其他参数都是关键字。下表提供了参数的简要说明。
序号 |
Argument & Description |
1 |
dimensions
它给出了数组的维度。一维数组是数字,多维数组是列表。
|
2 |
:element-type
是类型说明符,默认值为T,即任意类型
|
3 |
:initial-element
初始元素值。它将创建一个数组,其中所有元素都初始化为特定值。
|
4 |
:initial-content
作为对象的初始内容。
|
5 |
:adjustable
它有助于创建一个可调整大小(或可调整)的向量,其底层内存可以调整大小。参数是一个布尔值,表示数组是否可调,默认值为 NIL。
|
6 |
:fill-pointer
它跟踪实际存储在可调整大小向量中的元素数量。
|
7 |
:displaced-to
它有助于创建与指定数组共享其内容的置换数组或共享数组。两个数组应具有相同的元素类型。:displaced-to 选项不能与 :initial-element 或 :initial-contents 选项一起使用。此参数默认为零。
|
8 |
:displaced-index-offset
它给出了创建的共享数组的索引偏移量。
|
例 4
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
(setq myarray (make-array '(3 2 3)
:initial-contents
'(((a b c) (1 2 3))
((d e f) (4 5 6))
((g h i) (7 8 9))
))
)
(setq array2 (make-array 4 :displaced-to myarray :displaced-index-offset 2))
(write myarray)
(terpri)
(write array2)
当您执行代码时,它返回以下结果 -
#3A(((A B C) (1 2 3)) ((D E F) (4 5 6)) ((G H I) (7 8 9)))
#(C 1 2 3)
如果置换数组是二维的 -
(setq myarray (make-array '(3 2 3)
:initial-contents
'(((a b c) (1 2 3))
((d e f) (4 5 6))
((g h i) (7 8 9))
))
)
(setq array2 (make-array '(3 2) :displaced-to myarray :displaced-index-offset 2))
(write myarray)
(terpri)
(write array2)
当您执行代码时,它返回以下结果 -
#3A(((A B C) (1 2 3)) ((D E F) (4 5 6)) ((G H I) (7 8 9)))
#2A((C 1) (2 3) (D E))
让我们将置换索引偏移量更改为 5 -
(setq myarray (make-array '(3 2 3)
:initial-contents
'(((a b c) (1 2 3))
((d e f) (4 5 6))
((g h i) (7 8 9))
))
)
(setq array2 (make-array '(3 2) :displaced-to myarray :displaced-index-offset 5))
(write myarray)
(terpri)
(write array2)
当您执行代码时,它返回以下结果 -
#3A(((A B C) (1 2 3)) ((D E F) (4 5 6)) ((G H I) (7 8 9)))
#2A((3 D) (E F) (4 5))
例 5
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
;a one dimensional array with 5 elements,
;initail value 5
(write (make-array 5 :initial-element 5))
(terpri)
;two dimensional array, with initial element a
(write (make-array '(2 3) :initial-element 'a))
(terpri)
;an array of capacity 14, but fill pointer 5, is 5
(write(length (make-array 14 :fill-pointer 5)))
(terpri)
;however its length is 14
(write (array-dimensions (make-array 14 :fill-pointer 5)))
(terpri)
; a bit array with all initial elements set to 1
(write(make-array 10 :element-type 'bit :initial-element 1))
(terpri)
; a character array with all initial elements set to a
; is a string actually
(write(make-array 10 :element-type 'character :initial-element #\a))
(terpri)
; a two dimensional array with initial values a
(setq myarray (make-array '(2 2) :initial-element 'a :adjustable t))
(write myarray)
(terpri)
;readjusting the array
(adjust-array myarray '(1 3) :initial-element 'b)
(write myarray)
当您执行代码时,它返回以下结果 -
#(5 5 5 5 5)
#2A((A A A) (A A A))
5
(14)
#*1111111111
"aaaaaaaaaa"
#2A((A A) (A A))
#2A((A A B))