Domanda

Ho sentito molto parlare di linguaggi di programmazione funzionale e sono disposto a impararne uno.Immagino che sarà principalmente per divertimento, tuttavia spero che migliorerà le mie capacità di programmazione.

Ho principalmente background in C#/.NET, quindi la mia prima scelta è imparare F# (a causa di .NET e della familiarità con Visual Studio).D'altra parte, mi chiedo se F# abbia funzionalità come le macro Lisp o le funzioni di ordine superiore Haskell.

Potresti confrontare F#, Haskell e Lisp?Quale sarà la lingua che sceglierai?

È stato utile?

Soluzione

F # è la mia lingua di scelta, ma vi consiglio vivamente a tutti di apprendimento. Sono tutti molto diversa e interessante di per sé. Ecco un rapido corso al fine di ognuno (forse con un leggero F # bias), si può facilmente trovare maggiori informazioni googling:

F # - è un linguaggio che lo rende facile da programmare in stile funzionale, consente di copiare facilmente gli oggetti invece di mutazione. Vi dà anche i tipi di dati interessanti, come tuple e tipi di dati algebrici, costrutti di linguaggio utili come pattern matching e list comprehension. Ha anche OO e le caratteristiche imperativi e un buon accesso alle biblioteche, dal momento che è possibile utilizzare qualsiasi componente .NET framework.

Haskell - è un linguaggio funzionale puro e pigro, facendo una bestia rara o addirittura unico. Questo significa che non ci sono effetti collaterali a tutti, a meno che non sono tracciati da una monade. Haskel ha anche tuple, dati algebriche e pattern matching.

Lisp - mentre F # e Haskell vengono digitati staticamente, Lisp è dinamicamente tipizzato. Ha sintassi distintivo che utilizza un sacco di parentesi e fornisce un interessante funzione macro che consente di effettuare le trasformazioni al programma stesso ed estendere la sintassi.

Altri suggerimenti

Ho avuto la stessa domanda una volta

Da allora, ho programmato in F#.Ora sono molto contento di averlo fatto, poiché è davvero utile comprendere LINQ in C# e questo è stato anche il mio background.(Non uso quasi mai foreach in C# da quando ho imparato F#)

Ho imparato tramite F# molte cose sulla valutazione pigra, elenchi e sequenze, per i quali potresti scegliere qualsiasi linguaggio con un buon supporto per elenchi, tuple e così via (come qualsiasi linguaggio funzionale immagino), ma se scegli F# , tutto ciò sarà molto utile anche in C#.Forse conosci già tutte queste cose e le usi bene, ma in caso contrario, scegli Fa#.

Ho iniziato Qui :un video tutorial molto carino, molto impressionante e un tutor molto stimolante.

Al momento sto guardando questi video sul canale 9 sulle basi della programmazione funzionale. E 'spiegato con Haskell, ma i principi fondamentali si applicano a tutte le lingue. Devo dire che è molto informativo e facile da capire.

Questa è una domanda molto soggettiva.

La mia opinione è che Scheme (una variante Lisp) e la lettura SICP è la cosa giusta. Potrai imparare molto.

Ma ai fini pratici e se sei uno sviluppatore .NET allora forse F # è meglio.

Non so F #, ma mi piace giocare con esso a volte. La mia lingua è Clojure che è molto funzionale e lavora sul CLR troppo, ma la versione JVM è la versione principale.

E si riporti un sacco di roba che si desidera. La differenza di principale a F # è che Clojure è dinamicamente tipizzato e ha davvero un buon manico modo concurency (uno dei migliori direi).

A proposito. Lo sapevate che F # è stato fatto perché Haskell era di difficile da ottenere in esecuzione sul CLR? (Quello non è tutta la storia, naturalmente, ma parte di essa la sua)

Nessuno ha effettivamente risposto a questa domanda specifica: "Mi chiedo se F # ha caratteristiche come le macro Lisp o Haskell funzioni di ordine superiore".

F # non offre le macro. Inoltre, non offre tipi di alto-kinded (che è quello che ho pensato che stavi chiedendo in un primo momento).

F # non offre funzioni di ordine superiore in che si può facilmente scrivere una funzione che prende una funzione e restituisce una funzione. In realtà, C # (o realmente qualsiasi linguaggio .NET) può fare questo come il delegato Func fa parte del framework .NET.

Perché scegliere? Imparare sia Lisp e Haskell sul proprio. Nessun punto per l'apprendimento F # sul proprio tempo però. Se ne avete bisogno per il lavoro, potrai imparare sul posto di lavoro;)

EDIT: Il ragazzo stava guardando lingua da imparare per divertimento. Bene, Lisp e Haskell sono buoni candidati dal momento che il divertimento è tutto quello che stanno per essere utilizzati per (nessun lavoro retribuito lì). Egli "potrebbe" (anche se improbabile) avere la possibilità di usare F # sul posto di lavoro (lui è nel negozio di MS), quindi perché imparare qualcosa nel tempo libero, quando può essere pagato l'apprendimento sul posto di lavoro.

Ho imparato tutti loro ad un grado diffeent, e vi consiglio di iniziare con Scheme (un dialetto Lisp) - semplicemente perché è più facile da imparare. Haskell e F # sono staticamente tipizzati, che è un grande vantaggio per i progetti di vita reale, ma secondo me hanno un po 'di sintassi "troppo" e non sono così facili da prendere come Scheme.

C'è un'implementazione Scheme piacevole per NET - IronScheme. Potete dare un'occhiata al mio articolo " Giocando con IronScheme " per vedere se ti piace.

Se confrontiamo questa tre lingue mi raccomando Haskell. È più pratico di LISP penso (perché è sistema di tipo) e più potente ed intelligente di F #. Per quanto si sa F # è un porto .NET di OCaml e in qualche misura, non è chiaro come ideoligally Haskell è o come OCaml è. Ti consiglio di studiare Haskell o OCaml sapere come inconvinient F # è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top