我是Haskell的新手,但仍然没有想出如何做任何现实的事情。 我已经看过了复发关系的例子,但目前对我来说实施起来太先进了。
我试图设置递归关系:
f(t,i) = (2/3)*f(t+1,i+1) + (1/3)*f(t+1,i-1)
但我无法确定将输入的类型设置为f(a,b)或如何定义它。
答案 0 :(得分:2)
Haskell定义的函数与其他语言略有不同 - 你不要将参数括在括号中,而是以类似于数学的方式使用它们的意思"首先执行此操作"。所以你的函数在haskell中看起来有点像这样,你只需要在函数名和变量之间留一个空格
f t i = (2/3) * f (t+1) (i+1) + (1/3) * f (t+1) (i-1)
另外,为了防止无限循环,重要的是你为递归结束创建一个条件,例如,如果你只想在i为零时返回t你可以这样做(这是一个猜测,我不确定你的病情是什么,你可以不止一个)
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)