gpt4 book ai didi

haskell - 多次应用应用仿函数的方法

转载 作者:行者123 更新时间:2023-12-03 14:41:39 25 4
gpt4 key购买 nike

你好哈斯凯勒人。

假设我有一个应用仿函数(不是 monad 的实例)我
想多次应用到一个纯初始值。例如,

λ> Just (1+) <*> (Just (1+) <*> pure 0)
Just 2

如果我想将其推广到任意数量的连续
应用程序,我可以使用 fold .
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = foldr (<*>) i $ replicate n f

在这个定义之后,
λ> applyAppl (Just (1+)) 10 $ pure 0
Just 10

我有一个尴尬的怀疑,即泛化也可能是
使用高阶内置应用工具之一完成,例如 sequenceAtraverse .它可以?

(编辑考虑到下面的前两条评论。)

最佳答案

您可以使用 iterate :

applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = iterate (f <*>) i !! n

加载到 GHCi:
ghci> applyAppl (Just (+1)) 10 (pure 0)
Just 10

我不确定这一定比您的实现更好,因为我怀疑这两种实现都融合成具有基本相同性能配置文件的东西(尽管我没有测试过),但它是不同的。

我已经看到这种“ iterate(!!)”模式用于内存,所以我很确定,至少,它不会有更差的性能。

关于haskell - 多次应用应用仿函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646991/

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