W języku F # konieczne jest użycie rec
słowa kluczowego. W Haskell nie ma potrzeby jawnego określania, czy dana funkcja jest rekurencyjna, czy nie.
Biorąc pod uwagę rolę rekurencji w programowaniu funkcjonalnym, projekt F # wydaje mi się dość dziwny. Czy jest to dobra decyzja dotycząca projektu języka, czy istnieje tylko z powodów historycznych lub z powodu ograniczenia implementacyjnego?
źródło
Odpowiedź na to pytanie została udzielona na SO i zawiera pewne silne historyczne podłoże, dla którego używane jest „rec”.
Oto ważny cytat dla potomności:
źródło
Rekurencja
let
definiuje znacznie bardziej skomplikowaną semantykę niż normalna. Dlatego, ze względu na prostotę i przejrzysty wygląd języka, istnieje dobry powód, aby mieć oba, tak samo jak oddzielnelet
,let*
iletrec
na schemacie.Prosty
let x = y in z
jest równoważny((fun x -> z) y)
. Rekurencyjne let jest znacznie bardziej skomplikowane i może wymagać użycia kombinatora punktów stałych.źródło