No F # é necessário usar a rec
palavra - chave. Em Haskell, não há necessidade de dizer explicitamente se uma determinada função é recursiva ou não.
Dado o papel da recursão na programação funcional, o design do F # parece bastante estranho para mim. É uma boa decisão de design de linguagem ou existe apenas por motivos históricos ou devido a uma restrição de implementação?
fonte
Esta pergunta foi respondida no SO e inclui alguns antecedentes históricos fortes sobre o motivo pelo qual "rec" é usado.
Aqui está a citação importante para a posteridade:
fonte
Uma recursiva
let
define uma semântica significativamente mais complicada do que a normal. Portanto, por uma questão de simplicidade e design de linguagem limpa, há um bom motivo para ter os dois, da mesma forma que ter separadolet
,let*
eletrec
no Scheme.Simples
let x = y in z
é equivalente a((fun x -> z) y)
. Um let recursivo é muito mais complicado e pode envolver o uso de um combinador de ponto fixo.fonte