List 使列表成为符号
我试图List 使列表成为符号,list,lisp,elisp,List,Lisp,Elisp,我试图弹出elisp中列表的一个元素,如下所示 (pop '(1 2)) 但是,由于我的误解,这不起作用b/c列表还没有被内在化为一个符号。有没有一种惯用的方法来实现上述目标,或者这不是一种正确的方法?再胡闹一点,我发现我能做到 (pop (progn (setq tmp '(1 2)) tmp)) 但这似乎不对。有没有一种方法可以制作匿名列表并像我尝试做的那样修改它们?是一个宏 修改其参数的值, a 例如: 请注意,修改的是位置的值,而不是位置中包含的对象 例如: 这样,列表(1 2 3)
弹出elisp中列表的一个元素,如下所示
(pop '(1 2))
但是,由于我的误解,这不起作用b/c列表还没有被内在化为一个符号。有没有一种惯用的方法来实现上述目标,或者这不是一种正确的方法?再胡闹一点,我发现我能做到
(pop (progn (setq tmp '(1 2)) tmp))
但这似乎不对。有没有一种方法可以制作匿名列表并像我尝试做的那样修改它们?是一个宏
修改其参数的值,
a
例如:
请注意,修改的是位置的值,而不是位置中包含的对象
例如:
这样,列表(1 2 3)
不会被修改,只会修改变量的值
你到底想做什么?是一个宏
修改其参数的值,
a
例如:
请注意,修改的是位置的值,而不是位置中包含的对象
例如:
这样,列表(1 2 3)
不会被修改,只会修改变量的值
你到底想做什么?pop
不会做你认为它会做的事。它不会修改任何列表。它只是用列表的cdr
重新绑定给定变量
在Emacs中运行(macroexpand'(pop-foo))
,我得到:
(car-safe (prog1 foo (setq foo (cdr foo))))
请注意,没有任何列表修改功能,例如rplaca
或rplacd
pop
,这些功能并不能实现您认为的功能。它不会修改任何列表。它只是用列表的cdr
重新绑定给定变量
在Emacs中运行(macroexpand'(pop-foo))
,我得到:
(car-safe (prog1 foo (setq foo (cdr foo))))
请注意,没有任何列表修改函数,例如rplaca
或rplacd
@jenesaisquoi只有变量绑定发生了变化,而不是实际对象。@jenesaisquoi只有变量绑定发生了变化,而不是实际对象。
(car-safe (prog1 foo (setq foo (cdr foo))))