Common lisp 唐´;我不知道如何给数组赋值
我最近开始学习Lisp,我有一个简单的代码,它定义了一个函数(使用defun),它创建了一个包含四个元素的数组,然后将值7赋给数组的第一个位置Common lisp 唐´;我不知道如何给数组赋值,common-lisp,Common Lisp,我最近开始学习Lisp,我有一个简单的代码,它定义了一个函数(使用defun),它创建了一个包含四个元素的数组,然后将值7赋给数组的第一个位置 (defun func(setf array (make-array '(4)))) (setf (aref array 0) 7) 但它会在输出中打印FUNC,这是为什么 函数始终需要参数列表,即使它是空的 (defun func () ; <- here (setf array (make-array '(4))) (setf (ar
(defun func(setf array (make-array '(4))))
(setf (aref array 0) 7)
但它会在输出中打印FUNC,这是为什么 函数始终需要参数列表,即使它是空的
(defun func () ; <- here
(setf array (make-array '(4)))
(setf (aref array 0) 7))
这没有多大作用,因为返回值是setf
分配的最后一个值,即7
。您很可能希望返回数组:
(defun func ()
(let ((array (make-array '(4))))
(setf (aref array 0) 7))
array))
请注意,元素1、2和3未初始化,因此稍后尝试从中读取时会出现未定义的行为(当然,除非您在之前设置了它们的值)。如果希望将数组视为仅填充到第一个元素,则可以使用填充指针
:
(defun func ()
(let ((array (make-array 4 :fill-pointer 0)))
(vector-push 7 array)
array))
如果您只需要数组的确切结构,您可以复制一个文本:
(defun func ()
(copy-seq #(7 0 0 0)))
您缺少函数定义的参数列表部分。在任何情况下,(defun)的输出始终是函数名。如果您(defun add()…)将获得add。
(defun func ()
(copy-seq #(7 0 0 0)))