我是LISP的新手我有Peter Seibel的“Practical Common Lisp”一书,但我找不到我的问题的答案。 所以基本上如何让它返回最后一个“:do”
的值(defun averages (numbers)
(loop :for i :in numbers :sum i :into x :do (/ x (length numbers))))
请记住,我没有这么久。 我也不是非常清楚Stackoverflow的不成文和不做的事。
答案 0 :(得分:4)
使用finally
:
(defun averages (numbers)
(loop :for i :in numbers :sum i :into x
:finally (return (/ x (length numbers)))))
为了避免两次遍历列表,你可以做(按照@ mark-reed和@ joshua-taylor的建议)
(defun averages (numbers)
(loop :for n :in numbers :sum n :into x :count t :into len
:finally (return (/ x len))))
但在性能方面可能没什么区别。
PS。您可能需要考虑CLOCC/CLLIB/math.lisp
以满足您的基本统计需求。
答案 1 :(得分:0)
如果你没有在LOOP中使用多个变量等高级功能,那么它很容易简化:
(defun averages (numbers)
(loop for i in numbers sum i into x
finally (return (/ x (length numbers)))))
利用LOOP表单返回总和:
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))
首先检查一个空的数字列表可能也很有用。