gpt4 book ai didi

caching - 更好的缓存结果模式

转载 作者:行者123 更新时间:2023-12-02 11:19:13 26 4
gpt4 key购买 nike

我现在多次运行类似的模式,这种模式很容易出错(打字错误可以跳过一些缓存),而且对我来说看起来不太好。有没有更好的方法来编写这样的内容?

sum_with_cache' result cache ((p1,p2,p3,p4):partitions) = let
(cache_p1, sol1) = count_noncrossing' cache p1
(cache_p2, sol2) = count_noncrossing' cache_p1 p2
(cache_p3, sol3) = count_noncrossing' cache_p2 p3
(cache_p4, sol4) = count_noncrossing' cache_p3 p4
in sum_with_cache' (result+(sol1*sol2*sol3*sol4)) cache_p4 partitions

那么基本上N个操作都可以更新缓存?

我也可以写这样的东西:

process_with_cache' res cache _ [] = (cache, res)
process_with_cache' res cache f (x:xs) =
let (new_cache, r) = f cache x
in process_with_cache' (r:res) new_cache f xs
process_with_cache = process_with_cache' []

但这看起来也不太干净。有更好的方法来编写这段代码吗?

最佳答案

另一种类似的模式是当您请求一系列命名随机数时:

let (x, rng') = random rng''
(y, rng) = random rng'
in (x^2 + y^2, rng)

这正是使用状态 monad 的正确方法:

import Control.Monad.State

对于 (RandomGen g) => g 类型的所有随机数生成器,都有一个状态单子(monad) State g,它隐式地线程化状态:

do x <- state random
y <- state random
return (x^2 + y^2)

state 函数仅采用 s -> (a, s) 类型的函数,并将其转换为 State s a 类型的计算>,在本例中:

state :: (RandomGen g) => (g -> (a, g)) -> State g a

您可以使用 runStateevalStateexecState 运行 State 计算:

runState (liftA2 (\x y -> x^2 + y^2) (state random) (state random))
(mkStdGen 0)

关于caching - 更好的缓存结果模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456732/

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