Domanda

E 'possibile forzare F # a comportarsi come un linguaggio funzionale puro come Haskell ? Forse l'utilizzo di alcune direttive del compilatore?

PS: poiché vengo da un C / C ++ di fondo, voglio sforzarmi di imparare la programmazione funzionale, senza imparare Haskell:)

È stato utile?

Soluzione

Non è possibile forzare questo comportamento in F #, ma come ha detto Brian disciplina è il tuo migliore amico. Per esempio. non utilizzare mutable, for o while loop, le parole chiave ref, ecc attaccare anche con strutture puramente immutabili dati (Unione discriminata, elenco, tuple, carta, ecc). Se avete bisogno di fare IO ad un certo punto, l'architetto del programma in modo che essi sono separati dal codice puramente funzionale.

Non dimenticare di programmazione funzionale è tutto limitante e isolare gli effetti collaterali.

Altri suggerimenti

No, mi dispiace. Devi solo usare la disciplina.

Se siete come me, probabilmente evitare la 'roba buona' se non sforzatevi di usare Haskell al posto di F # e l'uso Haskell come idiomaticamente possibile. Utilizzando i tipi di dati algebrici, invece di oggetti, imparare ad amare la pigrizia, abbracciando la monade, e più sono molto di più di una parte fondamentale della Haskell, e probabilmente alcuni dei punti più fini (a mio parere) di programmazione funzionale pura.

F # non ha come ripida di una curva di apprendimento in molti modi, ma il suono come si sta imparando per divertimento, quindi perché non sfidare te stesso in ogni modo? Posso attestare che il passaggio a F # dopo aver usato Haskell può dare una sensazione molto migliore di come F # in generale dovrebbe da utilizzare in ogni modo.

Cibo per la mente.

Gli aspetti puramente funzionali del Haskell sono fondamentali per la lingua. Non si può semplicemente trapiantare è tra le lingue. Essa comporta notevoli decisioni di progettazione - per esempio, la natura puramente funzionale Haskell portato all'invenzione della monade IO. F # non ha una tale "valvola di sfogo" per il calcolo stateful.

Inoltre, imparare a programmare in un linguaggio che supporta la programmazione funzionale, ma non assolutamente farla rispettare potrebbe in realtà essere istruttivo. Molte persone si confondono tra le decisioni di progettazione individuali di Haskell (ad esempio IO Monade, per colpire ancora una volta il grande esempio) e come funzionale programmazione funziona in generale.

In breve: No, non è possibile questo. Ma cosa si può fare è guardare molto attentamente e domanda tutto quello che fai che coinvolge garantire le operazioni statali e di sequenziamento per assicurarsi che non v'è un'astrazione più puro che ti manca.

No. Attualmente compilatore F # non può fare questo controllo.

Perché non iniziare a scrivere qualche programma F # per imparare la programmazione funzionale? So che alcune persone che hanno imparato ML / O'Caml / F # e poi si trasferisce a Haskell.

Quindi si avrà una migliore comprensione di purezza. (Se proprio non avete toccato alcun linguaggio di programmazione funzionale prima, la vostra comprensione della pura funzionale potrebbe essere superficiale.)

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