最近私はClojureをたくさん使っていますが、私はその共通のlispリーダーマクロが提供する機能を理解できません。私にこれを簡単に説明することができますか?Clojureにはない普通のLispリーダマクロにはどのような利点がありますか?
答えて
要するに、リーダマクロは、区切り文脈内でプログラミング言語の構文を再定義する機能を提供します。
たとえば、リーダマクロを指定した正規表現リテラル(例:#"pattern"
)を実装できます。それらがなければ、re-pattern
に渡された文字列リテラルで正規表現を正しくエスケープする必要があります。ところで
、何の公共ClojureのAPIは、読者を修正するために存在しない間、これらの投稿に示すように、それは、不可能ではないです:Common Lispでは
単純な例です。 Common Lispは、[]の代わりにベクトル#()のリーダー構文が異なります。しかし、カスタムリーダマクロを作成することができれば、Common Lispのベクトルに[2 3 4 5]を渡すリーダマクロを持つことができます。
ほとんどのユーザーは作成したリーダマクロの意味を理解していないため、ほとんど使用されず、混乱を避けるためにRich HickeyはClojureでユーザー定義のリーダマクロを持つ機能を削除することにしました。しかし、Clojureには、あらかじめ定義されたリーダマクロ(引用、ベクトル、正規表現、マップなど)があります。
リーダーは、リーダーマクロでユーザー拡張が可能です。 リーダーはのS式を読み込む責任があります。 S式数値、文字列、シンボル、リスト、コンス、構造体、配列、文字、などのLispのデータ型の外部テキストの構文です ...
読者はの構文については責任を負いませんプログラミング言語Lisp - ちょうどのS式。
このように、読者マクロの主な目的は、s式の構文を拡張または変更することです。たとえば、ユーザーは、さまざまなCLOSクラス(URLなど)、ハッシュテーブル、特殊な識別子、新しい数値型などのテキスト構文を追加できます。
時には他の言語の構文を埋め込むためにも使用されます埋め込みSQL、埋め込みC、埋め込み式、Objective Cへの埋め込み呼び出し、埋め込みルール言語、組み込みXML、埋め込みJSONなどのトークンを作成するためのさまざまなルールを持つ、
もう1つの使用法は、ユーザーがs式をさらに制御できるようにすることです。リーダーが実際に読み取ります。例えば、条件付き特徴表現。
したがって、ユーザがプログラム可能なリーダマクロによって、ユーザは、上記の機能に関してリーダをカスタマイズすることができる。これは、データ構文/トークンレベルで言語をカスタマイズしたいというユーザにとっては便利だが、複雑さの面で別の層が追加されていると考えられる。
- 1. VS2010 SP1にはどのような大きな利点がありますか?
- 2. 普通のsyslog()よりもlog4cxxを使う利点は何ですか?
- 3. Clojure#=リーダマクロ
- 4. 普通のオブジェクトに比べてコンパニオンオブジェクトの利点は何ですか?このような
- 5. ClojureとLispの構文に大きな違いがありますか
- 6. Clojureにはどのような自動テストツールがありますか
- 7. gcc/g ++にはどのような便利なオプションがありますか?
- 8. スクリプトにNPMを使用する利点にはどのようなものがありますか?
- 9. Androidサポートライブラリの使用に不利な点はありますか?
- 10. SSLの利点は面倒な価値がありますか?
- 11. bitbucketブランチ構造にはどんな利点がありますか?
- 12. JavaScriptで `return cb()`に不利な点はありますか?
- 13. Visual Studioで「マルチプロセッサコンパイル」に不利な点はありますか?
- 14. std :: forward_listよりGnomeのgslistに利点がありますか?
- 15. Pythonスクリプトには通常どのような改行がありますか?
- 16. メモリが豊富な従来のシステムに比べてインメモリOLAPにはどんな利点がありますか?
- 17. lispの次のステートメントのメモリレイアウトダイアグラムはどのようになりますか?
- 18. Ehcacheのクラス構成とクエリキャッシュはどんな利点があり
- 19. アクションは普通のオブジェクトである必要があります。
- 20. SnapLabはInterface Builderでautolayoutを使用するとどのような利点がありますか?
- 21. clojureのような ":until"コマンドがありますか?
- 22. 画面サイズが普通のように画面に収まらない
- 23. プリズムインフラストラクチャプロジェクトにはどのようなものがありますか?
- 24. Common-Lisp/Javaの相互運用性にはどのようなアプローチがありますか?
- 25. このリファクタリングには何か利点はありますか?
- 26. コンストラクタインジェクションよりプロパティインジェクションの利点はありますか?
- 27. Mimeタイプがありません。それは普通ですか?
- 28. `jqXHR.status`にはどのような値がありますか?
- 29. HerokuにはどのようなWebサーバーオプションがありますか?
- 30. OperatingSystem.Versionにはどのような値がありますか?