gpt4 book ai didi

haskell - 在 Haskell 中循环的函数式非递归方法

转载 作者:行者123 更新时间:2023-12-04 22:47:41 26 4
gpt4 key购买 nike

这些天我在闲暇时使用 Haskell 进行编程。作为一名使用命令式语言超过 8 年的程序员,我很难理解一些函数式结构(尤其是折叠)。我正在解决 Euler 项目中的一个问题,碰巧产生了以下代码。

f (num, den) s | num*10 < den = s
| otherwise = f (ratio (num, den) s') s'
where s' = (s+2)

这个显式递归可以使用折叠或其他一些函数构造来重写吗?我使用折叠的主要障碍是提出阶梯函数。最终我放弃了,并求助于递归。

编辑:另外,如何在没有显式递归的情况下将函数内另一个函数返回的输出作为调用函数的输入?

最佳答案

永远有好老 until

f = until test func
where test ((a, b), _) = a * 10 < b
func (p, s) = (ratio p s+2, s+2)

不过,公平地说,您确实总是会遇到某种递归,这只是您将其抽象出多少的问题。 Haskell 中没有“循环”。

至于你的第二个问题,我相信你刚刚问过“我如何在不进行递归的情况下调用函数”。简而言之,你不能,因为这是递归的定义。

然而,对于像 until 这样的高阶函数 iteratefix (看看那个的实现)你可以避免调用你的工作函数。他们负责在幕后进行显式递归。

关于haskell - 在 Haskell 中循环的函数式非递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17137076/

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