阅读Practical Common Lisp之后,我终于明白了宏的重要性,我一直在寻找支持这个的.NET平台的语言。有一些用于.NET的lisp方言,但从我能够收集到的所有方言都是非常beta或被遗弃。最近我的兴趣是由Clojure引起的,但是它适用于java平台,虽然可能会使用ikvm,但它并不觉得有些集成。特别是当你想做像WPF这样的东西时。
最近我一直听到关于F#的悄悄话,我试着查看文档,如果我能找到关于宏支持的任何内容,但还没有找到它。有人知道吗?
谢谢:)
答案 0 :(得分:13)
Nemerle,http://nemerle.org/,是一种.NET语言(也支持单声道),它支持很多函数式编程范例,同时保持视觉上接近C#。它有广泛的宏观支持。
答案 1 :(得分:11)
嗯,F#基于OCaml,而OCaml则相当extensive macro system。鉴于F#和OCaml的语法和语义相似性,您可以将Ocaml宏系统移植到F#。
除了窃取Ocaml的宏系统外,我还没有意识到F#的固定宏系统。
答案 2 :(得分:7)
不。没有F#的宏。
答案 3 :(得分:6)
你看过Boo了吗?虽然Boo没有宏,但它有一个开放的编译器管道,它是语法元编程宏的一个很好的替代品。
[编辑]如评论中所述,Boo 现在拥有宏。
答案 4 :(得分:4)
但很好的恐怖,这些ocaml示例中的语法看起来模糊不清
你正在遇到与Lisp相同的基本语法权衡。如果你想要类似lisp的宏的强大功能,你倾向于最终使用类似lisp的语法,或者你的宏语法看起来与常规语法完全不同......两种方法都没有错,只是不同的选择
答案 5 :(得分:4)
我想我应该指出,现在有一个非常活跃的{/ 3}}的.NET / Mono端口。 Clojure支持LISP样式的宏,如问题中所述。
正如其他人所说,此时(2010年末),F#不支持宏。
答案 6 :(得分:3)
最近我一直听到关于F#的悄悄话,我试着查看文档,如果我能找到关于宏支持的任何内容,但还没有找到它。有人知道吗?
F#不支持宏,也不太可能。
答案 7 :(得分:2)
如何使用F#报价?
答案 8 :(得分:1)
这可能是你想要的另一种方式,但你知道RDNZL吗?它是一个foerign-function接口(FFI),允许您从Lisp代码调用.NET库。
它们很可能比任何Common Lisp或Scheme实现都要成熟得多,但是有.NET的Lisp方言:L#和DotLisp。
答案 9 :(得分:1)
答案 10 :(得分:0)
我目前正在调查F#中元编程的可能性。如果我们将宏定义为扩展为代码的文本模板,那么有两种明显的方法:
T4模板。 F#的实施:https://github.com/kerams/Templatus
我已经看到F#从字符串调用到单独的程序集然后加载程序集。