En F # il faut utiliser le rec
mot - clé. Dans Haskell, il n'est pas nécessaire de dire explicitement si une fonction donnée est récursive ou non.
Étant donné le rôle de la récursivité dans la programmation fonctionnelle, la conception F # me semble plutôt étrange. Est-ce une bonne décision de conception de langage ou existe-t-il uniquement pour des raisons historiques ou en raison d'une contrainte de mise en œuvre?
la source
Cette question a été répondue sur SO , et elle comprend un certain historique fort pour expliquer pourquoi "rec" est utilisé.
Voici la citation importante pour la postérité:
la source
Une récursive
let
définit une sémantique beaucoup plus compliquée qu'une sémantique normale. Par conséquent, dans un souci de simplicité et de conception de langage clair, il y a une bonne raison d'avoir les deux, tout comme avoir séparélet
,let*
etletrec
dans Scheme.Simple
let x = y in z
est équivalent à((fun x -> z) y)
. Un let récursif est beaucoup plus compliqué et peut impliquer l'utilisation d'un combinateur à point fixe.la source