F#中的宏支持

时间:2008-09-17 22:22:28

标签: .net f# functional-programming lisp clojure

阅读Practical Common Lisp之后,我终于明白了宏的重要性,我一直在寻找支持这个的.NET平台的语言。有一些用于.NET的lisp方言,但从我能够收集到的所有方言都是非常beta或被遗弃。最近我的兴趣是由Clojure引起的,但是它适用于java平台,虽然可能会使用ikvm,但它并不觉得有些集成。特别是当你想做像WPF这样的东西时。

最近我一直听到关于F#的悄悄话,我试着查看文档,如果我能找到关于宏支持的任何内容,但还没有找到它。有人知道吗?

谢谢:)

11 个答案:

答案 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#报价?

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

答案 8 :(得分:1)

这可能是你想要的另一种方式,但你知道RDNZL吗?它是一个foerign-function接口(FFI),允许您从Lisp代码调用.NET库。

它们很可能比任何Common Lisp或Scheme实现都要成熟得多,但是有.NET的Lisp方言:L#DotLisp

答案 9 :(得分:1)

.net有两个积极开发的Lisps

IronScheme - 基于DLR的方案实施

Xronos - 基于DLR的clojure端口

答案 10 :(得分:0)

我目前正在调查F#中元编程的可能性。如果我们将宏定义为扩展为代码的文本模板,那么有两种明显的方法:

  1. T4模板。 F#的实施:https://github.com/kerams/Templatus

  2. 我已经看到F#从字符串调用到单独的程序集然后加载程序集。