代码之家  ›  专栏  ›  技术社区  ›  ortusolis

更改let函数中定义的变量

  •  0
  • ortusolis  · 技术社区  · 7 年前

    给定以下let函数:

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

    如何修改列表foo?

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

    因此,返回的foo看起来像eks:'(一些新列表)或(a b修改的d)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Barmar    7 年前

    您可以使用 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 对于词汇变量,只有特殊变量。