Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在循环中返回特定值_Loops_Common Lisp - Fatal编程技术网

Loops 如何在循环中返回特定值

Loops 如何在循环中返回特定值,loops,common-lisp,Loops,Common Lisp,我是LISP的新手,我有Peter Seibel的《实用公共LISP》一书,但我找不到我的问题的答案。 那么基本上我如何让它返回最后一个“:do”的值呢 请记住我做这件事的时间不长。 我也不太清楚Stackoverflow的不成文的注意事项。使用: 为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样) 但就性能而言,这可能不会有多大区别 < PS. >你可能需要考虑你的基本统计需求。 < P>使用: 为了避免遍历列表两次,您可以这样做(正如@mar

我是LISP的新手,我有Peter Seibel的《实用公共LISP》一书,但我找不到我的问题的答案。 那么基本上我如何让它返回最后一个“:do”的值呢

请记住我做这件事的时间不长。 我也不太清楚Stackoverflow的不成文的注意事项。

使用:

为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样)

但就性能而言,这可能不会有多大区别

< PS. >你可能需要考虑你的基本统计需求。

< P>使用:

为了避免遍历列表两次,您可以这样做(正如@markreed和@joshuataylor所建议的那样)

但就性能而言,这可能不会有多大区别


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)))