Common lisp 唐´;我不知道如何给数组赋值

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

我最近开始学习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 (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)))