如何在Emacs中构造函数的关联列表?

如何在Emacs中构造函数的关联列表?,emacs,lisp,elisp,Emacs,Lisp,Elisp,我想这样做: '((function1 . '(lambda (args) "DOCSTRING" )) (function2 . '(lambda (args) "DOCSTRING" ))) 但“点”只是打开了它后面的东西: ((function1引号(lambda(args)“DOCSTRING”))(function2引号(lambda(args)“DOCSTRING”)) 我知道它应该正常工作,但在这种情况下如何纠正它? 这样我就可以通过一个键来获取函数。lambdaself q

我想这样做:

'((function1 . '(lambda (args) "DOCSTRING" ))
  (function2 . '(lambda (args) "DOCSTRING" )))
但“点”只是打开了它后面的东西:

((function1引号(lambda(args)“DOCSTRING”))(function2引号(lambda(args)“DOCSTRING”))

我知道它应该正常工作,但在这种情况下如何纠正它?
这样我就可以通过一个键来获取函数。

lambda
self quotes:

(setq falist
      '((function1 . (lambda (args) "DOCSTRING" 1))
        (function2 . (lambda (args) "DOCSTRING" 2))))
(funcall (cdr (assoc 'function2 falist)) 1)
; => 2

谢谢,现在我可以看到问题不在我代码的这一部分。(我也试过不用考特斯)@意志,一点都不坏,对我来说是有道理的。与公共Lisp中的
(setq falist`(func1.,(lambda(args)“DOCSTR1”1)))相比,
。。。我猜Elisp reader会将任何嵌套的lambda表单替换为它的值,一个自引用函数对象。。。。好或坏,但不同。:)Thnx的链接,有爆炸此外,请参见对Lisp的易变含义的批评(其中包括
quote
)@Abobo从未将lambda表单放在完全引用的列表中。这会阻止字节编译器和解释器进行检查,从而阻止lambda的字节编译,并破坏词法范围!相反,使用Will Ness建议的准引号!