gpt4 book ai didi

list - 如何在功能上表达依赖于列表中相邻元素的过滤器

转载 作者:行者123 更新时间:2023-12-03 12:28:30 24 4
gpt4 key购买 nike

有几次我想遍历一个列表并挑选出具有某些属性的元素,这些属性也依赖于列表中的下一个元素。举一个简单的例子,我有一些代码可以计算函数 f 的次数在指定的时间间隔内更改符号[a,b] .这在像 C 这样的命令式语言中是相当明显的:

for(double x=a; x<=b; x+=(b-a)/n){
s*f(x)>0 ? : printf("%e %e\n",x, f(x)), s=sgn(f(x));
}

在 Haskell 中,我的第一 react 是用尾部压缩列表,然后应用过滤器并使用 fst 提取元素管他呢。但这似乎笨拙且效率低下,所以我硬生生把它变成了一个折叠:
signChanges f a b n = tail $       
foldl (\(x:xs) y -> if (f x*f y)<0 then y:x:xs else x:xs) [a] [a,a+(b-a)/n..b]

无论哪种方式,我都觉得有一种“正确”的方式来做到这一点(就像在 Haskell 中经常出现的那样),而且我不知道(或者只是没有意识到)它是什么。对于如何以更惯用或更优雅的方式表达这一点的任何帮助,以及关于如何找到“正确”做事方式的建议,将不胜感激。

最佳答案

如果您使用 -O2 运行列表融合,则压缩是有效的。在这种情况下不需要使用折叠是 Haskell 的基本优势之一,因为它提高了模块化。

所以 zipper 是正确的方法。

关于list - 如何在功能上表达依赖于列表中相邻元素的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com