Quale sarebbe un buon primo progetto di programmazione funzionale? [chiuso]

19

Quale sarebbe un buon primo progetto di programmazione funzionale?

Sto cercando di concludere con un botto il mio progetto di laurea e voglio completarlo con un progetto di programmazione funzionale. Non l'abbiamo studiato a scuola, ma siamo incoraggiati a provare a imparare cose nuove da soli, e ho pensato che l'apprendimento di un nuovo paradigma non solo di una nuova lingua sarebbe un grande esercizio per me, e probabilmente qualcosa di interessante anche per gli insegnanti. .

Il problema è che voglio iniziare un po 'in anticipo sul mio progetto per sfruttare le vacanze estive e ottenere una migliore comprensione della programmazione funzionale e familiarizzare con una lingua.

Che cosa diresti sarebbe un progetto di buona pratica che è un po 'impegnativo, ma mi permette anche di imparare la lingua, il paradigma ecc. E poi cosa penseresti sarebbe un buon progetto (uno più avanzato) per il mio baccelliere progetto?

Anche i suggerimenti per il miglior linguaggio da cui iniziare quando si entra in programmazione funzionale sarebbero apprezzati.

    
posta Meme 27.05.2011 - 10:52
fonte

7 risposte

10

In genere è più semplice orientarsi in qualcosa di relativamente matematico o logico: i linguaggi di programmazione funzionale sono generalmente adatti per applicazioni che rappresentano una forma di trasformazione da un dato input a un output.

Alcune idee, in ordine di difficoltà:

  • Algoritmi genetici: scrivere un programma che sviluppi le soluzioni per un particolare compito in cui le soluzioni sono rappresentate in un semplice DSL. Mi sono divertito prima di creare piccoli robot che cacciano il cibo in una griglia 2D e di sviluppare diversi tipi di strategie

  • Compilatori di analisi - crea una libreria parser combinator che ti consente di costruire un parser per una lingua arbitraria usando funzioni di ordine superiore.

  • Se vuoi davvero una sfida, puoi provare a scrivere un gioco per computer ... sii consapevole che questo è un compito difficile dato che i giochi hanno una quantità enorme di stato mutabile che può essere difficile da gestire in uno stile di programmazione funzionale. Aspettatevi di saperne di più di quanto abbiate mai voluto sapere sulle monadi ecc .....

Consiglierei Clojure come linguaggio funzionale pragmatico. Lo uso da circa 18 mesi e sono estremamente soddisfatto della scelta. I motivi principali sono:

  • Concorrenza - Clojure ha uno straordinario sistema STM che a mio avviso lo rende la migliore lingua del mondo al momento per la concorrenza multi-core. Guarda il video all'indirizzo: link se vuoi capire perché è così speciale
  • È un Lisp - quindi a causa della filosofia del "codice è dati" è fantastico per la metaprogrammazione basata su macro (programmi che scrivono programmi, algoritmi genetici ecc.)
  • Programmazione funzionale pragmatica - Lo stile Clojure è molto funzionale (molta enfasi sulle funzioni di ordine superiore, sequenze pigre ecc.) ma non è totalmente puro come Haskell. Ci sono molti buoni strumenti per gestire lo stato di mtable e gli efetti laterali
  • Dinamico - Clojure è un linguaggio dinamico per impostazione predefinita. Trovo che questo sia un grande incentivo per la produttività. Tuttavia, è possibile aggiungere facoltativamente suggerimenti di tipo statico in un secondo momento, se si desiderano i vantaggi in termini di prestazioni della digitazione statica.
  • Completamente compilato - Il codice Clojure è sempre rispettato (anche se fai un "eval") in modo da ottenere prestazioni abbastanza decenti, sicuramente migliori della maggior parte dei linguaggi dinamici che ho usato.
  • Puoi accedere gratuitamente a tutte le librerie e gli strumenti nell'ecosistema JVM . Quindi, a differenza dei linguaggi accademici che dispongono di librerie molto limitate, è possibile accedere a qualsiasi cosa nell'universo Java abbastanza facilmente

Puoi provare le basi in modo semplice con:

  • Il 4Clojure set di problemi online - i primi problemi fungono da buona introduzione "learning by doing" alla lingua Clojure
  • la REPL Clojure online al link
risposta data 27.05.2011 - 13:00
fonte
9

Prima di iniziare a pensare a progetti specifici, inizia con l'apprendimento delle basi della programmazione funzionale in modo da avere una buona idea dei tipi di progetti che sarebbero adatti.

Il posto migliore per iniziare è probabilmente La struttura e l'interpretazione dei programmi per computer (SICP), che si basa sul Schema dialetto di Lisp. Questo è un testo CS classico e il testo completo è disponibile online (link fornito).

Se vuoi essere elegante e utilizzare un linguaggio funzionale più moderno che si rivolge alla JVM, dai un'occhiata a Clojure. C'è anche una versione adattata di SICP specificatamente per Clojure .

Passando sopra il testo SICP, avrai un'idea del perché la programmazione funzionale sia così adatta a determinati tipi di compiti e gli esercizi potrebbero ispirare un progetto a tutti gli effetti. Se scegli di percorrere la rotta Clojure e vuoi esaminare alcuni progetti esistenti, ci sono alcuni buoni link qui .

    
risposta data 27.05.2011 - 11:25
fonte
3

Analisi quantitativa

Se trovi che la finanza è un po 'interessante fare un po' di cose quantistiche con la programmazione funzionale è una buona corrispondenza dato che è molto algoritmica. Sto parlando di teoria del portafoglio e cose come rapporti di sharpe e ordinamento, ecc. Crea un'app che analizzi i rendimenti di un fondo e fornisca statistiche, diagrammi, ecc.

diversi

Consiglierei F # solo perché penso che sia un linguaggio funzionale facile per iniziare, ha buoni strumenti e un buon framework che lo supporta. Altre alternative sono chiare e clojure ma sono un po 'più difficili da imparare.

    
risposta data 27.05.2011 - 11:56
fonte
3

Per un vantaggio iniziale, potresti provare a implementare un piccolo gioco di blackjack in F #. Questo è un progetto a casa assegnato durante questo breve video tutorial . La soluzione è anche fornita in rete (e in uno dei video).

    
risposta data 27.05.2011 - 13:45
fonte
2

Potresti scrivere un interprete per lo schema o il lisp con OCaml.

    
risposta data 27.05.2011 - 12:00
fonte
2

A quale linguaggio funzionale stavi pensando. Ognuno ha caratteristiche diverse. L'unica lingua che ha avuto il maggiore impatto su di me è stata Haskell e ti suggerirei di fare lo stesso.

    
risposta data 27.05.2011 - 13:22
fonte
0

Potresti anche contribuire ad alcuni progetti open source.

Ad esempio, nel linguaggio di programmazione di Frege , c'è molto lavoro da fare. Ad esempio, potresti occuparti del porting delle librerie Haskell di base. Questo ti renderebbe una sorta di esperto di Haskell mentre lavori su di esso.

    
risposta data 23.09.2011 - 09:40
fonte

Leggi altre domande sui tag