在Emacs Lisp中转发函数时超出评估深度

时间:2015-06-19 04:48:56

标签: emacs lisp elisp

这里只是一个我没有设法工作的简化代码。我不明白出了什么问题。

(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)
你可以告诉我一个线索吗?这不应该是一个递归调用,但似乎是。感谢。

1 个答案:

答案 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)