.net f# functional-programming lisp clojure

.net - soporte macro en F#



functional-programming lisp (11)

Nemerle, en http://nemerle.org/ , es un lenguaje .NET (que también es compatible con mono) que admite una gran parte del paradigma de programación funcional mientras se mantiene visualmente cerca de C #. Tiene un amplio soporte de macros.

Después de leer Practical Common Lisp, finalmente entendí cuál era el problema con las macros, y he estado buscando un lenguaje para la plataforma .NET que lo soporte. Hay algunos dialectos lisp para .NET pero de lo que he podido reunir son muy beta o abandonados. Recientemente, Clojure ha despertado mi interés, pero es para la plataforma java y, aunque es probable que pueda usar ikvm, no parece estar integrado. Especialmente cuando quieres hacer cosas como WPF.

Recientemente he escuchado susurros sobre F #, traté de mirar la documentación si podía encontrar algo sobre el soporte macro, pero no lo he encontrado. Entonces, ¿alguien sabe?

Gracias :)


Nop. No hay macros para F #.


pero bueno horrores la sintaxis en esos ejemplos ocaml parece oscura

Ahí te encuentras con el mismo compromiso sintáctico fundamental que tienes con Lisp. Si quieres el poder de las macros tipo lisp, tiendes a terminar con una sintaxis parecida a lisp para el lenguaje, o bien tu macro sintaxis se ve bastante diferente de tu sintaxis regular ... nada de malo en cualquier enfoque, solo diferentes opciones


Eso puede ser al revés de lo que quieres, pero ¿sabes de RDNZL ? Es una interfaz de función directa (FFI) que le permite llamar a bibliotecas .NET desde su código Lisp.

Probablemente sean mucho menos maduros que cualquier implementación de Common Lisp o Scheme, pero hay dialectos Lisp para .NET: L # y DotLisp .


Hay dos Lisps activamente desarrollados para .net

IronScheme - implementación de esquema basado en DLR

Xronos : puerto de clojure basado en DLR


¿Has mirado a Boo ? Si bien Boo no tiene macros, tiene una cartera de compilación abierta, que es una buena alternativa a las macros para la metaprogramación sintáctica.

[EDITAR] Como se señaló en los comentarios, Boo tiene macros ahora.


Bueno, F # está basado en OCaml y OCaml tiene un macro sistema bastante extenso . Dadas las similitudes sintácticas y semánticas de F # y OCaml, es posible que pueda trasladar el sistema macro Ocaml a F #.

Además de robar el sistema macro de Ocaml, no conozco un sistema de macro enlatado para F #.



Recientemente he escuchado susurros sobre F #, traté de mirar la documentación si podía encontrar algo sobre el soporte macro, pero no lo he encontrado. Entonces, ¿alguien sabe?

F # no admite macros y es poco probable que lo haga.


Pensé que debería señalar que ahora hay un puerto .NET / Mono bastante activo de Clojure . Clojure admite macros de estilo LISP como se indica en la pregunta.

Como han dicho otros, las macros no son compatibles con F # en este punto (finales de 2010).


Actualmente estoy investigando las posibilidades de meta-programación en F #. Si definimos las macros como una plantilla de texto que se expande en código, entonces hay dos enfoques obvios:

  1. Plantillas T4. Hay implementación para F #: https://github.com/kerams/Templatus

  2. He visto en algún lugar la invocación de F # desde cadenas en ensamble separado y luego cargando el ensamblado.