Lisp为参数赋值变量

时间:2017-02-03 00:59:46

标签: lisp

我试图在我的函数中为变量赋一个参数(list)。我一直得到变量L没有值,我怎样才能在函数里面给list参数赋值?

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

1 个答案:

答案 0 :(得分:1)

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

(defun pali (list)
   (let ((a list))
        ((b (reverse list)))
     ...))

将DEFVAR置于函数中几乎肯定是错误的,如果你使用DEFVAR和A和B这样的名字,可能会对你造成严重伤害.DEFVAR会创建一个全局变量,并且它会生成一个名为它的符号& #34;特别&#34 ;;在将来你使用它的任何地方,你都会获得符号值而不是词法变量。当你不期待它时会发生奇怪的事情。这就是为什么DEFVAR变量通常被命名为 A 等,而不仅仅是A.使用LET来制作一个正常的词法变量。然后,最初将它设置为NIL然后使用SETQ来改变它并不是很多,尽管如果你愿意,你可以这样做。即便只是

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

如果那就是你想要的[注意你可以用一个SETQ来设置很多变量。当然不要这样做