gpt4 book ai didi

haskell - 我怎样才能分解这个 Haskell 表达式以避免重复计算?

转载 作者:行者123 更新时间:2023-12-04 17:13:22 27 4
gpt4 key购买 nike

我有这个功能(产生斐波那契数列):

unfoldr (\(p1, p2) -> Just (p1+p2, (p1+p2, p1)) ) (0, 1)

在这里,我注意到一个重复的表达式, p1+p2 ,我想考虑一下,以便它只计算一次。加法本身不是一个昂贵的计算,但对于更一般的版本:
unfoldr (\(p1, p2) -> Just (f p1 p2, (f p1 p2, p1)) ) (0, 1)
where f = arbitrary, possibly time-consuming function

在上述情况下, f p1 p2计算两次(除非有一些我不知道的神奇编译器优化),如果 f 可能会造成性能瓶颈需要大量的计算。我无法分解 f p1 p2where因为 p1p2不在范围内。分解此表达式的最佳方法是什么,以便 f只计算一次?

最佳答案

unfoldr (\(p1, p2) -> let x = f p1 p2 in Just (x, (x, p1)) ) (0, 1)
where f = arbitrary, possibly time-consuming function

关于haskell - 我怎样才能分解这个 Haskell 表达式以避免重复计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3219338/

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