Loops 如何在循环中返回特定值
我是LISP的新手,我有Peter Seibel的《实用公共LISP》一书,但我找不到我的问题的答案。 那么基本上我如何让它返回最后一个“:do”的值呢 请记住我做这件事的时间不长。 我也不太清楚Stackoverflow的不成文的注意事项。使用: 为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样) 但就性能而言,这可能不会有多大区别 < PS. >你可能需要考虑你的基本统计需求。 < P>使用: 为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样) 但就性能而言,这可能不会有多大区别Loops 如何在循环中返回特定值,loops,common-lisp,Loops,Common Lisp,我是LISP的新手,我有Peter Seibel的《实用公共LISP》一书,但我找不到我的问题的答案。 那么基本上我如何让它返回最后一个“:do”的值呢 请记住我做这件事的时间不长。 我也不太清楚Stackoverflow的不成文的注意事项。使用: 为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样) 但就性能而言,这可能不会有多大区别 < PS. >你可能需要考虑你的基本统计需求。 < P>使用: 为了避免遍历列表两次,您可以这样做(正如@mar
PS.,你可能需要考虑你的基本统计需求。
< P>如果你不使用循环内的多变量等高级特征,那么很容易简化:(defun averages (numbers)
(loop for i in numbers sum i into x
finally (return (/ x (length numbers)))))
只需利用循环表单返回的和:
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))
首先检查空的数字列表也可能很有用。如果不使用高级功能,如循环中的多个变量,则很容易简化:
(defun averages (numbers)
(loop for i in numbers sum i into x
finally (return (/ x (length numbers)))))
只需利用循环表单返回的和:
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))
首先检查空的数字列表也可能有用。此外,
length
调用第二次不必要地遍历列表。我会这样做:(循环:for I:in numbers:sum I:into x:sum 1:into n:finally(return(/x n))
将其更改为“(return(/x len))调用的len函数是什么?它不是一个函数,而是另一个变量-在循环中添加一个子句,以便在每次迭代时向其添加1(:sum 1:into
-我用了n
,@sds用了len
)也不需要:sum 1:into len
;你可以只:count I:into n
。这可能没有多大区别,但它更清楚地表明len只是数字的计数,而不是(例如)平均值的权重总和。此外,length
调用第二次不必要地遍历列表。我会这样做:(循环:for I:in numbers:sum I:into x:sum 1:into n:finally(return(/x n))
将其更改为“(return(/x len))调用什么len函数?它不是一个函数,而是另一个变量-在循环中添加一个子句,以便在每次迭代时向其添加1(:sum 1:into
-我使用了n
,@sds使用了len
)也不需要:求和1:in len
;你只需要:计数i:in n
。这可能没有多大区别,但它更清楚地表明len只是数字的计数,而不是(例如)平均值的权重之和。
(defun averages (numbers)
(/ (loop for i in numbers sum i)
(length numbers)))