/ / Relations de récurrence dans haskell - haskell, recurrence

Relations de récurrence dans haskell - haskell, recurrence

Je suis nouveau à Haskell et je n'ai pas encore trouvé comment faire quoi que ce soit de réaliste. J'ai examiné des exemples de relations de récurrence, mais la mise en œuvre est trop avancée pour moi pour le moment.

J'essaie de mettre en place la relation de récurrence:

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

mais je ne peux pas comprendre pour définir mes types pour l'entrée à f (a, b) ou comment le définir en général.

Réponses:

2 pour la réponse № 1

Haskell définit les fonctions un peu différemmentà partir d'autres langues - vous ne mettez pas les paramètres entre parenthèses, au lieu de cela, ils sont utilisés d'une manière similaire aux mathématiques où cela signifie "faites ce bit en premier". Ainsi, votre fonction ressemblerait un peu à haskell, où vous avez juste besoin d'un espace entre le nom de votre fonction et vos variables

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

De plus, pour éviter une boucle infinie, il est importantvous créez une condition pour que la récursivité se termine, par exemple si vous voulez simplement retourner t quand i est zéro, vous pouvez le faire (c'est une supposition, je ne suis pas sûr de ce que vous aimeriez que votre condition soit, vous pouvez en avoir plusieurs)

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

Il est également considéré comme une bonne pratique d'ajouter le type de fonction (normalement je le ferais comme ma toute première étape)

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)