Mic*_*ens 4 haskell lazy-evaluation
我正在尝试在Haskell中编写一个函数来计算满足谓词的列表中的元素,True如果数量超过某个阈值则返回.我有一个看起来像这样的实现:
hitsThreshold :: Int -> (a -> Bool) -> [a] -> Bool
hitsThreshold threshold test strs =
(length $ filter test strs) >= threshold
Run Code Online (Sandbox Code Playgroud)
问题是,我希望这个懒惰地评估,以便它在长度达到阈值时立即终止.例如,我应该能够传入一个无限列表,它应该在有限的时间内终止(假设最终达到阈值).有一个简单的方法吗?
jam*_*idh 10
这是你想要的一个例子
length $ take 10 $ filter even [1..]
Run Code Online (Sandbox Code Playgroud)
[1 ..]是无限的,所以如果这不是懒惰,程序就会挂起.
你正在通过过滤器输入[1 ..] even,然后将数字加上10 ....然后你用该列表做一些事情.而不是length,您可以通过使用来检查它是否达到了阈值(>= 10) $ length.