我需要通过迭代来解决最大代码。我开始创建一个数组,你可以帮我继续:
(do do-array (d l)
(setf b (make-array (length d))
(do (((i=0)(temp d)) ((> i (- l 1)) (return))
(setf (aref b i) (car temp))
(setq i (+ i 1))
(setq temp (cdr temp))))
答案 0 :(得分:1)
我假设你的意思是“迭代”,如“使用内置的迭代结构”,而不是“使用常量堆栈空间”,因为Common Lisp并不普遍优化尾调用。像
这样的东西(loop for elem in my-list maximizing elem)
应该为你做。问题的重要但未指明的部分是:你如何处理空列表?上面的内容会返回0
,但您可能要返回nil
或抛出错误?
答案 1 :(得分:1)
作为基于loop
的解决方案的替代方案,这里有一些更详细的内容:
CL-USER> (defun my-max (lst)
(let ((max (car lst)))
(dolist (x (cdr lst) max)
(when (> x max)
(setf max x)))))
MY-MAX
CL-USER> (my-max '())
NIL
CL-USER> (my-max '(1 2 3 -4))
3