gpt4 book ai didi

haskell - 当累加器满足特定条件时,如何从haskell中的折叠函数中突破?

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

应用 someFunction 后,我正在计算列表的总和像这样对它的每个元素:

sum (map someFunction myList)
someFunction资源非常繁重,因此要对其进行优化,如果总和超过某个阈值,我想停止计算总和。

似乎我需要使用 fold 但如果累加器达到阈值,我不知道如何突破。我的猜测是以某种方式撰写 foldtakeWhile但我不完全确定如何。

最佳答案

另一种技术是使用 foldMEither捕捉提前终止效应。 Left信号提前终止。

import Control.Monad(foldM)

sumSome :: (Num n,Ord n) => n -> [n] -> Either n n
sumSome thresh = foldM f 0
where
f a n
| a >= thresh = Left a
| otherwise = Right (a+n)
要忽略退出状态,只需编写 either id id .
sumSome' :: (Num n,Ord n) => n -> [n] -> n
sumSome' n = either id id . sumSome n

关于haskell - 当累加器满足特定条件时,如何从haskell中的折叠函数中突破?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51727040/

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