Loops LISP-在循环之前计算动态迭代器而不使用let

Loops LISP-在循环之前计算动态迭代器而不使用let,loops,lisp,Loops,Lisp,我想写一个类似于mapcar的函数,但它将函数映射到一系列数字上。函数必须从开始到结束或从开始到结束进行迭代,具体取决于哪个更大。是的,这是一个类,但我不是在寻找代码,只是一个如何实现这一点的提示。我被告知先计算迭代器,但没有使用let。除了使用let,还有其他更有效的方法来声明和使用局部变量吗?这是我的密码: (defun mapnum (fun start end) (cond ((< start end) (loop for x from start to (- e

我想写一个类似于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)))
(defun mapnum(有趣的开始和结束)
(续)
(开始-结束)
(x的循环从开始向下到(+结束1)
收集(funcall fun x)))
(t零)

提前谢谢你的帮助

我会利用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))))

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

追加到列表末尾是错误的。