Come posso tradurre il codice ML in F #? [chiuso]

5

Recentemente ho trovato un libro, Strutture dati puramente funzionali e tutti gli esempi in questo libro sono riportati in ML con le versioni Haskell nella sua appendice. Ma conosco solo un linguaggio di programmazione con il paradigma funzionale: F #. E dopo un po 'di ricerche, ho scoperto che F # è (o era) la porta .NET di CAML, che deriva da ML. Ho sentito dire che CAML è solo un dialetto di ML.

Detto questo, è possibile tradurre ML in F # senza molta conoscenza di ML? Quali sono le principali differenze dalle lingue? O è la mia migliore scommessa per imparare semplicemente ML invece?

    
posta Gulshan 08.10.2011 - 02:02
fonte

4 risposte

2

Sto guardando la mia copia del libro qui e le uniche cose che penso non siano direttamente traducibili in F # sarebbero

  • Le firme utilizzate per descrivere alcuni dei tipi di dati generici.
  • La notazione personalizzata che usa per i pigri algos.

In entrambi i casi la conversione dovrebbe essere piuttosto semplice se si conosce F # e si può capire il significato del libro (invece di provare a copiare e incollare i codici)

Inoltre, non credo che tu debba aver paura di non capire la ML. Non ci ho mai programmato ma mi sono abituato allo stile dopo un po 'e sono riuscito a riprendere il libro bene. Le lingue sono abbastanza simili specialmente considerando che si tratta di un libro didattico che non si basa sui minuscoli casi angolari delle lingue coinvolte (e ML è una lingua molto solida!).

    
risposta data 08.10.2011 - 18:00
fonte
5

Given that, is it possible to translate ML to F# without a lot of knowledge of ML?

Direi che non è possibile in questo (estremo) caso.

What are the key differences from the languages?

La grande differenza in questo contesto è che F # non ha nulla come il sistema dei moduli di ML. Non solo F # non ha un sistema di moduli di ordine superiore (che Okasaki usa estesamente a buon effetto per astrazione, composizione e bootstrap) non ha nemmeno moduli gerarchici, il che significa che è un'astrazione povera in confronto. Puoi utilizzare .NET OOP, ma OOP è seriamente zoppo rispetto al sistema dei moduli di ML.

Or is my best bet to just learn ML instead?

Consiglierei di conoscere il sistema dei moduli di ML se vuoi capire la metà del libro di Okasaki. Altrimenti, puoi tradurre il codice di basso livello (non le potenti astrazioni) da ML a F # per conoscere il coraggio delle strutture di dati puramente funzionali.

    
risposta data 23.02.2012 - 16:35
fonte
3

Sei un po 'fuori da quello che pensi sia F #. F # non è una porta .Net di ML più di C # è una porta .Net di Java. F # prende molto da OCaml (puoi compilare la maggior parte del codice OCaml usando il compilatore F #).

F # ha anche un approccio più imperativo di OCaml per il fatto che è necessario per utilizzare il framework .Net.

In base a questo post SO qui ci sono altre cose che F # non supporta come fa OCaml:

  • funtori
  • Oggetti in stile OCaml
  • varianti polimorfiche
  • il preprocessore camlp4
risposta data 08.10.2011 - 06:54
fonte
-1

Esiste un progetto per questo e altri libri ML link dove hanno convertito molto di il codice di esempio già.

È stato notato in un commento che Google Code sta per sola lettura molto presto, quindi vale la pena afferrare quel codice ora. Non penso che lo uccideranno interamente a breve scadenza ma non puoi dirlo.

Normalmente non pubblicherei una risposta "link-only" ma c'è un sacco di buoni codici da guardare. (Ci scusiamo se riferirsi a questo come un "progetto di libro" ingannare le persone).

    
risposta data 13.08.2015 - 17:56
fonte

Leggi altre domande sui tag