質問

『Practical Common Lisp』を読んだ後、マクロの何が重要なのかをようやく理解し、これをサポートする .NET プラットフォーム用の言語を探してきました。.NET 用の Lisp 方言はいくつかありますが、私が収集した限りでは、すべて非常にベータ版であるか、放棄されています。最近、私の興味は Clojure によって引き起こされましたが、これは Java プラットフォーム用であり、おそらく ikvm を使用できるとはいえ、統合されているようには感じられません。特に WPF のようなことをしたい場合。

最近、F# に関するささやき声を耳にするようになり、マクロのサポートについて何か見つけられないかとドキュメントを見ようとしましたが、見つかりませんでした。それで、誰か知っていますか?

ありがとう :)

役に立ちましたか?

解決

さて、F# は OCaml に基づいており、OCaml にはかなりの機能があります。 充実したマクロシステム. 。F# と OCaml の構文的および意味的類似性を考慮すると、Ocaml マクロ システムを F# に移植できる可能性があります。

Ocaml のマクロ システムを盗むこと以外に、F# 用の既製のマクロ システムを知りません。

他のヒント

ネメルル、 http://nemerle.org/ は、視覚的に C# に近いままでありながら、関数型プログラミング パラダイムの多くをサポートする .NET 言語 (mono もサポート) です。広範なマクロをサポートしています。

いいえ。F# 用のマクロはありません。

見ましたか ブー?Boo にはマクロがありませんが、構文メタプログラミング用のマクロの優れた代替となるオープン コンパイラ パイプラインがあります。

[編集] コメントに記載されているように、Boo する 今はマクロがあります。

しかし、恐ろしいことに、これらの ocaml サンプルの構文は不明瞭に見えます

そこでは、Lisp の場合と同じ基本的な構文上のトレードオフに遭遇することになります。Lisp のようなマクロの機能が必要な場合は、その言語で Lisp のような構文を使用するか、マクロ構文が通常の構文とはかなり異なって見えるかのどちらかになる傾向があります...どちらのアプローチでも何も問題はなく、選択が異なるだけです

現在、非常に活発な .NET/Mono ポートがあることを指摘しておきたいと思いました。 クロージュア. 。質問に記載されているように、Clojure は LISP スタイルのマクロをサポートしています。

他の人が言っているように、現時点 (2010 年後半) ではマクロは F# でサポートされていません。

最近、F# に関するささやき声を耳にするようになり、マクロのサポートについて何か見つけられないかとドキュメントを見ようとしましたが、見つかりませんでした。それで、誰か知っていますか?

F# はマクロをサポートしていませんし、今後もサポートされる可能性は低いです。

F# 引用符を使用してみてはどうでしょうか?

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

それはあなたが望んでいることとは逆かもしれませんが、あなたは次のことを知っていますか? RDNZL?これは、Lisp コードから .NET ライブラリを呼び出すことができる外部関数インターフェイス (FFI) です。

これらはおそらく Common Lisp や Scheme の実装よりもはるかに成熟していませんが、.NET 用の Lisp 方言があります。 L# そして ドットリスプ.

.net 用に現在開発されている Lisp が 2 つあります。

アイアンスキーム - DLR ベースのスキームの実装

クロノス - DLR ベースの Clojure ポート

私は現在、F# でのメタプログラミングの可能性を調査しています。マクロをコードに展開されるテキスト テンプレートとして定義する場合、2 つの明らかなアプローチがあります。

  1. T4 テンプレート。F# の実装があります。 https://github.com/kerams/Templatus

  2. 文字列から別のアセンブリへの F# の呼び出しと、アセンブリの読み込みをどこかで見たことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top