给出以下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仍将作为原始列表返回。
答案 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
与词法变量一起使用,只能使用特殊变量。