haskell 中的递推关系

Recurrence relations in haskell

我是 Haskell 的新手,仍然没有弄清楚如何做任何实际的事情。 我看过递归关系的例子,但目前的实现对我来说太先进了。

我正在尝试设置递归关系:

f(t,i) = (2/3)*f(t+1,i+1) + (1/3)*f(t+1,i-1)

但我不知道如何为 f(a,b) 的输入设置我的类型或如何定义它。

Haskell 定义的函数与其他语言略有不同——您不用将参数括在括号中,而是以类似于数学的方式使用它们,即 "do this bit first"。所以你的函数在 haskell 中看起来有点像这样,你只需要在你的函数名称和你的变量

之间有一个 space
f t i = (2/3) * f (t+1) (i+1) + (1/3) * f (t+1) (i-1)

此外,为防止无限循环,为递归结束创建条件很重要,例如,如果您只想 return t 当 i 为零时,您可以这样做(这是一个猜猜,我不确定你希望你的条件是什么,你可以有多个)

f t 0 = t
f 10 _ = 10
f t i = (2/3) * f (t+1) (i+1) + (1/3) * f (t+1) (i-1)

添加函数类型也是一种很好的做法(通常我会将其作为第一步)

f :: Float -> Float -> Float
f t 0 = t
f 10 _ = 10
f t i = (2/3) * f (t+1) (i+1) + (1/3) * f (t+1) (i-1)