F#中的宏支持

时间:2020-03-06 14:19:12  来源:igfitidea点击:

在阅读了《实践通用Lisp》之后,我终于了解了宏的重要意义,并且我一直在寻找一种支持该功能的.NET平台语言。 .NET有一些Lisp的方言,但据我所知,它们或者是beta版本,或者是废弃版本。最近,Clojure引起了我的兴趣,但它是针对Java平台的,虽然可能可以使用ikvm,但感觉并没有集成。尤其是当我们想做WPF之类的事情时。

最近,我听到关于F#的耳语,我尝试查看一下文档,如果我能找到有关宏支持的任何信息,但没有找到。有人知道吗?

谢谢 :)

解决方案

没有。 F#没有宏。

好吧,基于OCaml和OCaml的Fis具有相当广泛的宏系统。鉴于Fand OCaml在语法和语义上的相似性,我们也许可以将Ocaml宏系统移植到F#。

除了窃取Ocaml的宏系统外,我不知道F#的固定宏系统。

但令人恐惧的是,这些ocaml示例中的语法看起来晦涩难懂

在那里,我们遇到了与Lisp相同的基本句法折衷。如果我们希望使用类似Lisp的宏的功能,则倾向于以该语言的类似Lisp的语法结尾,或者宏语法看起来与常规语法完全不同...两种方法都没错,只是选择不同

Nemerle,位于http://nemerle.org/,是一种.NET语言(也支持mono),它在视觉上保持与C#的距离的同时,支持许多功能性编程范例。它具有广泛的宏支持。

你看过嘘吗?尽管Boo没有宏,但它具有开放的编译器管道,这是用于语法元编程的宏的很好替代。

[编辑]如评论中所述,Boo现在确实具有宏。

那可能与我们想要的相反,但是我们知道RDNZL吗?这是一个功能强大的接口(FFI),可让我们从Lisp代码中调用.NET库。

它们很可能不比任何Common Lisp或者Scheme实现成熟得多,但是.NET有Lisp方言:Land DotLisp。

.net有两个积极开发的Lisps

基于IronScheme DLR的方案实现

基于Xronos DLR的Clojure端口

使用Fquotations怎么样?

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

Recently I have been hearing whisper about F#, I tried to look at the documentation if I could find anything about macro support, but haven't found it. So does anyone know?

F不支持宏,因此不太可能支持宏。

我想我应该指出,现在有一个非常活跃的Clojure .NET / Mono端口。如问题中所述,Clojure支持LISP样式宏。

正如其他人所说,Fat目前不支持宏(2010年底)。