Lisp将变量指定给参数

Lisp将变量指定给参数,lisp,Lisp,我正在尝试将变量a指定给函数中的参数(列表)。我一直得到变量L没有值,我如何才能将函数中的变量赋值为list参数 (defun pali(list) (defvar a nil) (defvar b nil) (setq a (list)) (setq b (reverse list)) ) 如果我理解正确,你想要的是 (defun pali (list) (let ((a list)) ((b (reverse list))

我正在尝试将变量a指定给函数中的参数(列表)。我一直得到变量L没有值,我如何才能将函数中的变量赋值为list参数

   (defun pali(list)
    (defvar a nil)
    (defvar b nil)
    (setq a (list))
    (setq b (reverse list))
    )

如果我理解正确,你想要的是

(defun pali (list)
   (let ((a list))
        ((b (reverse list)))
     ...))
几乎可以肯定,将DEFVAR放在函数中是错误的,如果将DEFVAR与a和B等名称一起使用,可能会对您造成严重伤害。DEFVAR生成一个全局变量,并使命名它的符号成为“特殊”;在将来使用它的任何地方,都将获得符号值,而不是词汇变量。当你没有预料到的时候,奇怪的事情就会发生。这就是为什么DEFVAR变量通常被命名为A等,而不仅仅是A。使用LET生成一个普通的词汇变量。然后,最初将其设置为NIL,然后使用SETQ对其进行修改,这并没有多大意义,不过如果您愿意,也可以这样做。甚至只是

(let (a b)
   (setq a list
         b (reverse list))
   ...)

如果这是您想要的[请注意,您可以使用一个SETQ设置许多变量。当然,不必这样做]

您将向它传递什么?这似乎是编译时,我尝试。此问题可能与您提供的内容有关。您需要指定要计算的精确形式并复制/粘贴错误消息。在
(setq a(list))
中,您首先计算
列表(运行函数
(list)
),然后将返回值分配给
a
。它是设计的吗?
defvar
是顶级操作符,在
defun
中没有位置。改为使用
let
list
是您的参数
(list)
调用函数
list
,不带参数,因此返回
nil