gpt4 book ai didi

emacs - 在 Emacs Lisp 中执行前向函数时超出评估深度

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:05 24 4
gpt4 key购买 nike

这只是一个简化的代码片段,我还没有设法工作。我不明白哪里出了问题。

(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 中导致 错误 Lisp 嵌套超过 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)

你能给我一个线索吗?这不应该是这里的递归调用,但似乎是。谢谢。

最佳答案

使用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)

关于emacs - 在 Emacs Lisp 中执行前向函数时超出评估深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com