
macro support in F#在阅读了《实践通用Lisp》之后,我终于了解了宏的重大意义,并且我一直在寻找一种支持该功能的.NET平台语言。 .NET有一些Lisp的方言,但据我所知,它们要么是beta版本,要么是废弃版本。 最近,Clojure引起了我的兴趣,但它是针对Java平台的,虽然可能可以使用ikvm,但感觉并没有集成。 特别是当您想做WPF之类的事情时。 最近,我听到关于F#的耳语,我尝试查看一下文档,如果我能找到有关宏支持的任何信息,但还没有找到。 有人知道吗? 谢谢 :) Nemerle,位于http://nemerle.org/,是一种.NET语言(也支持mono),在视觉上保持与C#的距离时,它支持许多功能编程范例。它具有广泛的宏支持。 好吧,F#基于OCaml,而OCaml具有相当广泛的宏系统。鉴于F#和OCaml在语法和语义上的相似性,您可能可以将Ocaml宏系统移植到F#。 除了窃取Ocaml的宏系统外,我不知道F#的固定宏系统。 不。 F#没有宏。 你看过嘘吗?尽管Boo没有宏,但它具有开放的编译器管道,这是用于语法元编程的宏的很好替代。 [编辑]如评论中所述,Boo现在确实具有宏。 我想我应该指出,现在有一个相当活跃的Clojure .NET / Mono端口。如问题中所述,Clojure支持LISP样式宏。 正如其他人所说,F#目前不支持宏(2010年底)。 但令人恐惧的是,这些ocaml示例中的语法看起来晦涩难懂 在那里,您遇到了与Lisp相同的基本句法折衷。如果您希望像Lisp一样的宏功能强大,您倾向于要么以类似于Lisp的语言结尾,要么您的宏语法看起来与常规语法完全不同...两种方法都没错,只是选择不同
F#不支持宏,也不太可能支持宏。 如何使用F#报价? http://tomasp.net/blog/fsquotations.aspx .net有两个积极开发的Lisps IronScheme-基于DLR的方案实现 Xronos-基于DLR的Clojure端口 那可能与您想要的相反,但是您知道RDNZL吗?这是一个功能强大的接口(FFI),可让您从Lisp代码中调用.NET库。 它们很可能不比任何Common Lisp或Scheme实现成熟得多,但是.NET有Lisp方言:L#和DotLisp。 我目前正在研究F#中元编程的可能性。如果我们将宏定义为扩展为代码的文本模板,则有两种显而易见的方法: T4模板。有F#的实现:https://github.com/kerams/Templatus 我已经看到从字符串调用F#到单独的程序集中,然后再加载程序集的某个地方。 |