首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在通用Lisp中遍历list和range?

如何在通用Lisp中遍历list和range?
EN

Stack Overflow用户
提问于 2013-08-20 06:37:17
回答 1查看 451关注 0票数 1

例如,要在某个点上计算多项式,我必须循环遍历它的系数ai ∈ a0..an,用参数幂i相乘,然后把它全部加起来。(我知道Horner的方法,只是想不出更好的例子)当然,我可以用一些生成的序列计算压缩系数,并以某种方式遍历这些对:

代码语言:javascript
运行
复制
(loop for (ai, i) 
   in (apply #'list a (loop for i from 0 below (length a) collect i))
   sum (* ai (expt x i)))

但这似乎很麻烦。有办法把它合并成一个循环吗?

编辑:mapcar,而不是apply

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-20 07:02:33

首先是关于你的代码。当使用列表时,您需要知道一些事情。

  • 无论如何,APPLY是错误的,但是不要在列表操作中使用它。APPLY只允许有限数量的参数--就像公共Lisp中的任何函数一样。因此,APPLY被认为不执行列表操作或调用列表操作。它用于调用函数,其参数为list。如果将其用于正常的列表处理任务,任何足够长的列表都会触发错误。
  • 应该避免在列表中调用LENGTH。要计算列表的长度,必须遍历列表。为了迭代的目的,对列表进行映射或迭代就足够了。它将在最后终止。在许多情况下,迭代不需要知道某个列表的长度。

如果您想循环两种不同的方式,只需将其写在LOOP中作为两个变量。

代码语言:javascript
运行
复制
(loop for ai in coefficients and i from 0
      sum (* ai (expt x i)))

以上循环终止,因为ai只设置为系数的元素。然后i就会数数。and意味着变量并行执行。您可以将and替换为for,然后根据第一个变量计算第二个变量。类似于LETLET*

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18328480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档