【发布时间】:2018-02-22 17:42:27
【问题描述】:
给定以下 let 函数:
(let ((foo (list a b c d)))
foo)
如何修改列表 foo?
(let ((foo (list a b c d)))
;some code
foo)
所以返回的 foo 看起来像 eks: '(some new list) or (a b modified d)
我尝试过(设置),但 foo 仍将作为原始列表返回。
【问题讨论】:
给定以下 let 函数:
(let ((foo (list a b c d)))
foo)
如何修改列表 foo?
(let ((foo (list a b c d)))
;some code
foo)
所以返回的 foo 看起来像 eks: '(some new list) or (a b modified d)
我尝试过(设置),但 foo 仍将作为原始列表返回。
【问题讨论】:
您可以使用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 与词法变量一起使用,只能使用特殊变量。
【讨论】: