更改let函数中定义的变量

时间:2017-09-13 21:40:56

标签: lisp let

给出以下let函数:

(let ((foo (list a b c d)))
foo)

如何修改列表foo?

(let ((foo (list a b c d)))
;some code
foo)

所以返回的foo看起来像eks:'(一些新列表)或(a b b modified d)

我试过(设置)但是foo仍将作为原始列表返回。

1 个答案:

答案 0 :(得分:1)

您可以使用setf修改列表中的特定元素。

(let ((foo (list 'a 'b 'c 'd)))
  (setf (third foo) 'modified)
  foo)

这将返回(a b modified d)

或者,如果您想要替换整个变量,可以使用setq直接指定给它:

(let ((foo (list 'a 'b 'c 'd)))
  (setq foo (list 'some 'new 'list))
  foo)

您不能将set与词法变量一起使用,只能使用特殊变量。