Post by Andrea LaforgiaRipeto il concetto: la ricorsione per calcolare il fattoriale è, a
tutti gli effetti, la scelta sbagliata, e in termini di algoritmo, e
in termini di semplicità del codice.
Ni. Era l'implementazione di Roberto ad essere pessima (un buon esempio
di ricorsione naive ed inefficiente). Semmai la questione è che se in un
linguaggio non si ha TCO, verosimilmente *non* si dovrebbero usare
soluzioni ricorsive (se non per ricorsione provatamente piccola).
In particolare se lavori un un linguaggio senza loop dovrai usare
proprio la ricorsione e la dovrai usare "bene", in modo da non pagare
inefficienze non volute. In determinati contesti puoi anche assumere che
la TCO venga fatta anche in C. Tipicamente è così: siamo nel famoso
mondo dell'ottimizzazione ragionevole, vogliamo fidarci che la fa o
meno?
A seconda dei casi vederemo. Io in C il fattoriale non lo implementerei
ricorsivamente, se non a scopo didattico.
Post by Andrea LaforgiaA parte il fatto che questo non è vero e cioè non è vero che "una
buona fetta dello sviluppo" si sta spostando sui linguaggi funzionali
(F# è un semplice prodotto di studio e Erlang è usato in contesti
specifici), dimmi qual è il motivo, senza ipotizzare che da qualche
parte ve ne sia uno.
Guarda, io posso dirti l'aria che respiro io, non so quello che accade
"intorno a te". La diffusione dei linguaggi funzionali è in grossissima
crescita. Qualche tempo fa erano essenzialmente argomento di interesse
fra i gruppi di geeks (oltre che nell'accademia). Essenzialmente si
stava riscoprendo tantissimo questo paradigma. Haskell è stato uno dei
primi linguaggi a farsi una "seconda giovinezza" in questa maniera.
Poi, con Erlang che fa da apripista, si è cominciato a parlare anche in
altri ambiti e ambienti. Nascono nuovi progetti. Finalmente sempre più
persone si sono rese conto di come il modello stateful della
programmazione ad oggetti ha i suoi limiti, specie in presenza di
pesante concorrenza.
Map/reduce di google, etc etc etc.
Post by Andrea LaforgiaI linguaggi funzionali, per tua informazione,
sono molto più che semplice ricorsione.
Di fatto però la ricorsione è l'unico modo "puro" che si ha per
raggiungere la turing-completezza. I loop *necessariamente* hanno
bisogno di variabili modificabili: poi ci *sono* linguaggi funzionali
che hanno i loop, ma l'idea è che lo fanno per "pragmatismo", uscendo
dal modello funzionale per quello specifico costrutto. In pratica è una
forma di ibridizzazione, che va benissimo, figurati.
--
-riko