这里只是一个我没有设法工作的简化代码。我不明白出了什么问题。
(defun enumerate-indicies (func)
(let ((index 0))
(while (< index 5)
(funcall func index)
(setq index (1+ index)))))
(defun enumerate-multiplied-indicies (func)
(enumerate-indicies #'(lambda (index)
(funcall func (* 10 index)))))
以下测试代码按预期返回10
:
(defun test/enumerate-indicies ()
(let ((sum 0))
(enumerate-indicies #'(lambda (index)
(setq sum (+ sum index))))
sum))
(test/enumerate-indicies)
但是下面导致我的Emacs中的error Lisp nesting exceeds max-lisp-eval-depth
:
(defun test/enumerate-multiplied-indicies ()
(let ((sum 0))
(enumerate-multiplied-indicies #'(lambda (index)
(setq sum (+ sum index))))
sum))
(test/enumerate-multiplied-indicies)
你可以告诉我一个线索吗?这不应该是一个递归调用,但似乎是。感谢。
答案 0 :(得分:2)
如何使用lexical-let
来渗透lambda
?答案正确 100 吗?
(defun enumerate-indicies (func)
(let ((index 0))
(while (< index 5)
(funcall func index)
(setq index (1+ index)))))
(defun enumerate-multiplied-indicies (func)
(lexical-let ((func func))
(enumerate-indicies #'(lambda (index)
(funcall func (* 10 index))))))
(defun test/enumerate-multiplied-indicies ()
(lexical-let ((sum 0))
(enumerate-multiplied-indicies #'(lambda (index)
(setq sum (+ sum index))))
sum))
(test/enumerate-multiplied-indicies)