Domanda

Dopo aver letto Practical Common Lisp ho finalmente capito quale fosse il grosso problema delle macro e ho cercato un linguaggio per la piattaforma .NET che lo supporti.Esistono alcuni dialetti Lisp per .NET ma da quello che sono riuscito a raccogliere sono tutti molto beta o abbandonati.Recentemente il mio interesse è stato suscitato da Clojure, ma è per la piattaforma Java e anche se probabilmente potrebbe usare ikvm non sembra integrato.Soprattutto quando vuoi fare cose come WPF.

Recentemente ho sentito parlare di F#, ho provato a guardare la documentazione se potevo trovare qualcosa sul supporto delle macro, ma non l'ho trovato.Quindi qualcuno lo sa?

Grazie :)

È stato utile?

Soluzione

Bene, F# è basato su OCaml e OCaml ha un piuttosto macrosistema esteso.Date le somiglianze sintattiche e semantiche di F# e OCaml, potresti essere in grado di eseguire il porting del sistema macro Ocaml su F#.

Oltre a rubare il sistema macro di Ocaml, non sono a conoscenza di un sistema macro predefinito per F#.

Altri suggerimenti

Nemerle, a http://nemerle.org/ , è un linguaggio .NET (che supporta anche mono) che supporta gran parte del paradigma di programmazione funzionale rimanendo visivamente vicino a C#.Ha un ampio supporto macro.

No.Nessuna macro per F#.

Hai guardato? Boh?Sebbene Boo non disponga di macro, ha una pipeline di compilatore aperta, che è una buona alternativa alle macro per la metaprogrammazione sintattica.

[MODIFICA] Come notato nei commenti, Boo fa avere le macro adesso.

ma buon orrore, la sintassi in quegli esempi Ocaml sembra oscura

Lì ti trovi nello stesso compromesso sintattico fondamentale che fai con Lisp.Se vuoi la potenza delle macro simili a Lisp, tendi a finire con una sintassi simile a Lisp per il linguaggio, oppure la tua sintassi macro sembra molto diversa dalla tua sintassi normale...niente di sbagliato in nessuno dei due approcci, solo scelte diverse

Ho pensato di dover sottolineare che ora esiste un port .NET/Mono piuttosto attivo di Clojure.Clojure supporta le macro in stile LISP come indicato nella domanda.

Come altri hanno già detto, le macro non sono supportate in F# al momento (fine 2010).

Recentemente ho sentito parlare di F#, ho provato a guardare la documentazione se potevo trovare qualcosa sul supporto delle macro, ma non l'ho trovato.Quindi qualcuno lo sa?

F# non supporta le macro ed è improbabile che lo faccia mai.

Che ne dici di usare le virgolette F#?

http://tomasp.net/blog/fsquotations.aspx

Potrebbe essere il contrario di quello che desideri, ma ne sei a conoscenza RDNZL?È un'interfaccia per funzioni esterne (FFI) che ti consente di chiamare librerie .NET dal tuo codice Lisp.

Molto probabilmente sono molto meno maturi di qualsiasi implementazione Common Lisp o Scheme, ma esistono dialetti Lisp per .NET: L# E DotLisp.

Ci sono due Lisp sviluppati attivamente per .net

IronScheme - Implementazione dello schema basato su DLR

Xronos - Porto di clojure basato su DLR

Attualmente sto studiando le possibilità di metaprogrammazione in F#.Se definiamo le macro come modelli di testo che si espandono nel codice, allora ci sono due approcci ovvi:

  1. Modelli T4.Esiste un'implementazione per F#: https://github.com/kerams/Templatus

  2. Ho visto da qualche parte l'invocazione di F# dalle stringhe in un assembly separato e quindi il caricamento dell'assembly.

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