gpt4 book ai didi

loops - LISP - 在没有 let 的情况下计算循环前的动态迭代器

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

我想编写一个类似于 mapcar 的函数,但它会映射一个数字范围内的函数。该函数必须从开始向上或向下迭代到结束,具体取决于哪个较大。是的,这是一个类,但我不是在寻找代码,只是关于如何完成它的提示。我被告知先计算迭代器,但没有使用 let。除了使用 let 之外,还有其他更有效的方法来声明和使用局部变量吗?这是我的代码:

(defun mapnum (fun start end)
(cond
((< start end)
(loop for x from start to (- end 1)
collect (funcall fun x)))
((> start end)
(loop for x from start downto (+ end 1)
collect (funcall fun x)))
(t nil)))

提前感谢您的帮助。

最佳答案

我会使用 signum 函数来确定我应该递增还是递减。

(defun mapnum (func start end)
(do ((i start)
(j end (+ j (signum (- start end))))
(res nil))
((equal i j) res)
(setf res (cons (funcall func j) res))))

编辑:修改代码以避免附加到列表末尾。

关于loops - LISP - 在没有 let 的情况下计算循环前的动态迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702876/

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