23

ラケット マクロには、Scheme や Common Lisp に見られるものよりも高度な機能がありますか? 特にモジュール、名前空間、スコープなどに関してはそうだと思いますが、Racket マクロができることの簡単な要約をいただければ幸いです。他の Lisp ではできません。

さらに、Scheme/CL はリーダー層も開発者に公開します。これを使用すると、Racket でできるように、Scribble などの完全に新しい言語 (s-expr マクロだけでなく) をこれらの Lisp で作成することはできませんか?

言い換えれば、Racket は、この目的のために便利な構文ラッパーを備えた「言語指向プログラミング」に関する単なる哲学/慣例ですか、それとも、Scheme をより根本的に拡張して、その言語では技術的に不可能なことを行うのでしょうか?

どうもありがとう。

4

3 に答える 3

17

Racket で「言語指向プログラミング」を機能させる 2 つの重要な機能は次のとおりです。

  • モジュールシステムはベース言語の指定を可能にします
  • 状況依存マクロ

最初の箇条書きは基本的に何をするか#langです。モジュールシステムがリーダーのセットアップを担当し、特定のモジュールで利用可能なバインディングを使用すると、さまざまな言語を簡単に使用できます。これがないと、Scribble やat-exp.

2 つ目は、Racket が 、 などのオーバーライド可能な状況依存マクロを提供し#%app、モジュール内のすべての関数アプリケーションまたはモジュール全体の#%module-beginカスタマイズを可能にすることです。これにより、たとえば、モジュール全体に型チェック パスを追加できます。

これは、Racket で言語を構築するのに役立つ機能の完全なリストではありません。それについてもっと読むことに興味があるなら、「Languages as Libraries」という論文は読む価値があります。

于 2012-11-05T14:33:20.353 に答える
14

「構成可能でコンパイル可能なマクロ-いつ欲しいですか?」という論文を読むことをお勧めします。マシューフラットによる。

Racketでマクロとモジュールがどのように連携するかを説明します。

次に、Racketに小さな言語を実装します-TinyBasicと言います。次に、他の言語と比較します。

アップデート

http://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf

于 2012-11-05T10:48:49.660 に答える
6

@Scott がリストに投稿した後の同じ質問に対する Matthew の返信と、より最近の概要論文も参照してください。

于 2012-11-11T19:27:48.663 に答える