En F # es necesario usar la rec
palabra clave. En Haskell no hay necesidad de decir explícitamente si una función dada es recursiva o no.
Dado el papel de la recursividad en la programación funcional, el diseño de F # me parece bastante extraño. ¿Es una buena decisión de diseño del lenguaje o solo existe por razones históricas o por una restricción de implementación?
fuente
Esta pregunta ha sido respondida en SO e incluye algunos antecedentes históricos sólidos de por qué se usa "rec".
Aquí está la cita importante para la posteridad:
fuente
Un recursivo
let
define una semántica significativamente más complicada que una normal. Por lo tanto, en aras de la simplicidad y el diseño de lenguaje limpio, hay una buena razón para tener ambos, lo mismo que tener separadoslet
,let*
yletrec
en Scheme.Simple
let x = y in z
es equivalente a((fun x -> z) y)
. Un let recursivo es mucho más complicado y puede implicar el uso de un combinador de punto fijo.fuente