[haskell] 遍历列表的一个技巧

发布于 2022-09-05 04:30:17 字数 576 浏览 14 评论 2

本帖最后由 retuor 于 2010-07-28 13:05 编辑

本来是遍历树的,我把它简化成遍历列表了,本质一样的。

题目:有个整数列表 [a,b,c,...,z],s 为全部元素的和,把这个列表转换成 [a/s, b/s, ...., z/s]. 要求只遍历一次。

代码是这样的:

  1. g s (x:xs)=  (fromIntegral(x)/fromIntegral(s): p, x+s' )
  2.     where (p, s')= g s xs
  3. g s _ = ([], 0)
  4. f l = l'
  5.     where (l', s) = g s l

复制代码它是按 a/s: (b/s) : .... : [] 来构造输出的,这种方法在函式编程里太常见了。不同寻常的地方是,那些 a/s, b/s 的值开始的时候是不确定的,直到把链表遍历完成时,才得到 s 的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

埋情葬爱 2022-09-07 03:03:40

收集数据一次,输出一次。这样总要两次的。可以把题目所说的遍历一次理解成搜索数据一次,输出不算。

醉城メ夜风 2022-09-05 14:53:15

其实还是两遍:  计算 x + s' 一遍, 返回  [x/s] 一遍

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文