gpt4 book ai didi

Haskell Mini 函数实现

转载 作者:行者123 更新时间:2023-12-02 13:51:33 25 4
gpt4 key购买 nike

我一直在尝试使用此函数并使用 iterate 和 takeWhile 进行小型实现。它不必使用这些函数,实际上我只是想把它变成一行。我可以看到其中的模式,但如果不基本上制作相同的代码,只是使用迭代而不是递归,我似乎无法利用它。

fun2 :: Integer -> Integer
fun2 1 = 0
fun2 n
| even n = n + fun2 (n `div` 2)
| otherwise = fun2 (3 * n + 1)

任何帮助都会很棒。我已经为此苦苦挣扎了几个小时。谢谢

最佳答案

如果您想通过迭代来做到这一点,关键是将其分成更小的逻辑部分:

  • 使用规则生成序列

    ak+1 = ak/2 如果 ak 偶数

    ak+1 = 3ak+1 如果 ak 奇数

  • 在 aj = 1 处停止序列(如果 collatz conjecture 为真,则全部停止)。

  • 过滤掉路径上的偶数元素
  • 求和

那么这就变成了:

  f = sum . filter even . takeWhile (>1) . iterate (\n -> if even n then n `div` 2 else 3*n + 1)

但是,我确实认为使用辅助函数会更清楚

  f = sum . filter even . takeWhile (>1) . iterate collatz
where collatz n | even n = n `div` 2
| otherwise = 3*n + 1

这可能不会为您节省任何行数,但会将您的递归转换为数据的生成。

关于Haskell Mini 函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803593/

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