如何 return 循环中的特定值
How to return a specific value in a loop
我是 LISP 的新手,我有 Peter Seibel 的 Practical Common Lisp 一书,但找不到问题的答案。
所以基本上我如何得到这个 return 最后一个“:do”的值
(defun averages (numbers)
(loop :for i :in numbers :sum i :into x :do (/ x (length numbers))))
请记住,我这样做的时间并不长。
我也不是很清楚 Whosebug 中不成文的注意事项。
使用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
来满足您的基本统计需求。
如果你不在LOOP中使用多变量等高级特性,很容易简化它:
(defun averages (numbers)
(loop for i in numbers sum i into x
finally (return (/ x (length numbers)))))
只要利用循环形式 returns 总和:
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))
首先检查一个空的数字列表可能也很有用。
我是 LISP 的新手,我有 Peter Seibel 的 Practical Common Lisp 一书,但找不到问题的答案。 所以基本上我如何得到这个 return 最后一个“:do”的值
(defun averages (numbers)
(loop :for i :in numbers :sum i :into x :do (/ x (length numbers))))
请记住,我这样做的时间并不长。 我也不是很清楚 Whosebug 中不成文的注意事项。
使用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
来满足您的基本统计需求。
如果你不在LOOP中使用多变量等高级特性,很容易简化它:
(defun averages (numbers)
(loop for i in numbers sum i into x
finally (return (/ x (length numbers)))))
只要利用循环形式 returns 总和:
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))
首先检查一个空的数字列表可能也很有用。