【发布时间】:2017-03-13 22:53:29
【问题描述】:
当我想执行以下代码时遇到问题:
(defun sum1
(lambda (n)
(+ n 1)))
当我使用 M-x ielm 运行时,会出现下一条消息:
无效函数:(lambda (lambda (n) (+ n 1)) nil)
我想明确一点,虽然我可能会使用以下代码:
(defun sum1(n)
(+ n 1))
我想知道在这种情况下如何定义 lambda。
所有信息都被接受,我是新手。
【问题讨论】:
-
你可以对
defun进行宏扩展,看看它只是在做(defalias 'sum1 (lambda (n) (+ n 1))) -
Lambda 用于匿名函数。目前还不清楚你在问什么。你可以有,例如。
(defun make-adder (n) (lambda (x) (+ x n)))返回一个将 n 添加到数字的函数。您可以将匿名函数作为变量的值:(let ((adder (lambda (x) (+ x 2)))) ...)。 -
我试图为此写一个适合新手的答案,但我意识到真正的答案是:如果你想学习 lisp不要从 elisp 开始。而是从 Common Lisp(一种传统但比 elisp 更整洁的 lisp)、Scheme(一种更现代的 lisp)或其他东西(Clojure?)开始。 elisp 并没有什么问题,但它确实过时了:它的功能很好,但不是如何学习 Lisp,因为它只会让你感到困惑。 (如果你想知道如何破解 emacs,那么 elisp 是一个不错的起点。)
-
我终于成功了,
(eval '(defun sum1 () (function (lambda (n) (+ n 1))) t)¨ (funcall (sum1) 5) ; 6 -
@Rovaceni23 以防万一它仍然相关:您在此处使用
eval除了阻止有用的编译器警告和将lambda包装在function中之外应该没有任何影响@ 应该是完全多余的。