23

在阅读了 Practical Common Lisp 之后,我终于明白了宏有什么大不了的,并且我一直在为 .NET 平台寻找一种支持它的语言。.NET 有一些 lisp 方言,但据我所知,所有这些方言要么非常 beta,要么被废弃。最近我的兴趣被 Clojure 激发了,但它是针对 java 平台的,虽然可能可以使用 ikvm,但它并没有感觉到一些集成。尤其是当你想做 WPF 之类的东西时。

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

谢谢 :)

4

11 回答 11

13

http://nemerle.org/上的Nemerle是一种 .NET 语言(也支持单声道),它支持许多函数式编程范式,同时在视觉上接近 C#。它具有广泛的宏支持。

于 2008-09-17T23:29:25.430 回答
12

嗯,F# 是基于 OCaml 的,而 OCaml 有一个相当广泛的宏系统。鉴于 F# 和 OCaml 在句法和语义上的相似性,您可以将 Ocaml 宏系统移植到 F#。

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

于 2008-09-17T22:26:48.747 回答
7

没有。F# 没有宏。

于 2008-09-17T22:23:45.993 回答
6

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

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

于 2008-09-17T23:58:15.483 回答
4

但可怕的是,那些 ocaml 示例中的语法看起来晦涩难懂

在那里,您遇到了与 Lisp 相同的基本语法权衡。如果您想要类似 lisp 的宏的强大功能,您往往要么最终使用类似 lisp 的语言语法,要么您的宏语法看起来与您的常规语法完全不同......这两种方法都没有错,只是选择不同

于 2008-09-17T23:19:09.820 回答
4

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

正如其他人所说,此时(2010 年末)F# 不支持宏。

于 2010-11-07T01:10:35.843 回答
3

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

F# 不支持宏,而且不太可能永远支持。

于 2010-09-01T13:03:39.030 回答
2

使用 F# 引号怎么样?

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

于 2010-06-23T11:41:57.213 回答
1

这可能与您想要的相反,但是您了解RDNZL吗?它是一个外来函数接口 (FFI),可让您从 Lisp 代码中调用 .NET 库。

它们很可能远不如任何 Common Lisp 或 Scheme 实现成熟,但有用于 .NET 的 Lisp 方言:L#DotLisp

于 2008-09-19T10:18:47.123 回答
1

.net 有两个积极开发的 Lisp

IronScheme - 基于 DLR 的方案实现

Xronos - 基于 DLR 的 clojure 端口

于 2008-12-12T00:28:33.560 回答
1

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

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

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

于 2017-02-18T15:29:21.930 回答