問題タブ [reader-macro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macros - ディスパッチ リーダー マクロを無効にして読み取りテーブルを作成する
#x
Racket に基づいて新しい言語を作成していますが、構文-quote などの特定のマクロを機能させたくありません#'
。#'
構文の引用を行わないように削除するにはどうすればよいですか?
次のようにして、単一文字のマクロでそれを行うことができます
しかし、ディスパッチ マクロに対してこれを行う方法がわかりません。
lisp - リーダーマクロ内のLispコードを評価するには?
Common Lisp で独自の x86-64 アセンブラを作成していますが、x86-64 のサブセットに対して正しいバイナリ コードを生成します。カスタム リーダー マクロを使用してアセンブリ コードを構文ツリーに変換すると、期待どおりに動作します。
私が達成しようとしているのは、アセンブリ コード内で Lisp コードを使用できるようにすることです。そうすれば、Lisp をアセンブラのマクロ言語として使用できます。#a
マクロディスパッチ文字として使用し#e
、リーダーに終了を知らせるために使用します。リーダー内#l
で Lisp モードに変更し#a
、アセンブリ モードに戻る#e
(リーダー マクロの終了を通知するため) は、両方のモードで機能するはずです。
私が理解していないのは、評価されたコードの結果を入力ストリームに出力する方法 (残りのコードの前に処理される)、または Lisp コードの出力を再度読み取る方法です。 Lisp コード (アセンブリ コード) を適切に処理できます (残りのアセンブリ コードと同じ方法)。どうすればその目標を達成できますか?
補足: これは私の最初のリーダー マクロであるため、設計上の欠陥がある可能性があります。Lisp コードを文字列に読み込むという私のアプローチは、より短くて慣用的な方法があれば、必ずしも最善の方法ではないと思います。
以下は、私のリーダー マクロの簡略版です。
以下は、Lisp コードを含まないアセンブリ コードの例です。動作します。
そして、これは Lisp コードを内部に含むアセンブリ コードで、失敗します(以下のコンパイル エラーを参照してください)。この例では、Lisp コードはアセンブリ コードの後にありますが、アセンブリ コードと Lisp コードは区切り記号として#a
とを使用して自由に混在させることができます。#l
上記のコードの Lisp 部分は、カスタム リーダーで評価して、以下のコードと同じ結果を生成する必要があります。
しかし、代わりにコンパイルは失敗します:
lisp - # 別名 read-macro の使用
Doug Hoyte の本「Let Over Lambda」を読んでいると、次の#.
記号の説明、別名 read-macroを見つけました。
COMMON LISP に組み込まれている基本的な読み取りマクロは #. 読み取り時評価マクロ。この read マクロを使用すると、シリアル化できないが、少しの Lisp コードで作成できる、読み取るフォームにオブジェクトを埋め込むことができます。
これは第 4 章からのもので、本の大部分はここにあります: http://letoverlambda.com/index.cl/toc
これは、同じ式が毎回異なって読まれる可能性があることを示す本からの例です。
次に、著者はいくつかのハードコアなトリックを実演し、#
マクロでバリエーションを作成します。
#'
つまり、これもある種の読み取りマクロであることが判明し、通常は関数の名前を表すシンボルの前に使用されます。しかし、それは必要であり、そこでの彼の仕事は正確には何ですか?
高階関数のシンボルは、それの#'
有無にかかわらず配置できます。
同じ成功を収めました。
common-lisp - SharpsignコロンとGensymの違い
私はちょうどsharpsignコロンリーダーマクロを読んでいて、gensymと非常によく似た効果があるように聞こえました
Sharpsignコロン:「インターンされていないシンボルを導入します」
Gensym: "インターンされていない新鮮なシンボルを作成して返します"
というわけで簡単なテスト
それが失敗するように冷却してください。
いよいよマクロテスト
甘いので、ゲンシムのような方法で使用できます。
私には、これは明らかに同一の結果で gensym よりもきれいに見えます。重要な詳細が欠けていると確信しているので、私の質問は、それは何ですか?
common-lisp - asdf defsystem で :file コンポーネントの拡張子を選択します
答えがasdfドキュメントのこの段落にあると90%確信していますが、理解できないようです。".lisp" で終わらないソース ファイルをファイル コンポーネントとして使用できるかどうか疑問に思っています。たとえば、通常、私は次のようなものを持っています
ご覧のとおり、:file コンポーネントは拡張子を指定していません。".lisp" で終わらない Lisp ファイルをロードできるかどうか疑問に思っています。
これが必要な理由は少し奇妙ですが、質問には影響しないので、次のビットをスキップしてください。
「test.mylang」というファイルがあり、次で始まります
これ#!mylang
は、 #'mylang 関数にファイルの残りの解析を制御させるリーダー マクロです。したがって、Python 用のパーサーがあれば、#!python を使用し、#'python 関数が解析を行います。そのような場合、.mylang
or.py
拡張子を付けて、エディタがコードを強調表示する方法を即座に認識できるようにしたいと思います。
ありがとう
lisp - Lisp 読み込みエラー: ディスパッチ マクロで未定義の文字
私は自分の誕生日が Lisp の問題を解決する良い機会になると判断しました。
ある人から実験を実行する Lisp プログラムを受け取りました。彼の OS X 環境では問題なく動作します。ただし、Windows 7 または Ubuntu で実行することはできません。このプログラムは、Act-R 6.2 を使用してモデルを実行します。.lisp ファイルを読み込もうとすると、次のエラーが表示されます。
このエラーは、Windows 7 と Ubuntu でまったく同じです。必要な場合のコンソール出力は次のとおりです。
http://i.stack.imgur.com/dFXVm.png
load-turing-application.lisp は他の複数のファイルをロードしているようです。そのうちの 1 つが turing-application-v1.lisp で、この行(setf *smile* (#/initWithContentsOfFile: (#/alloc ns:ns-image)(ccl::%make-nsstring "smiley.jpg")))
が原因のようです。#/-表記と関係があると思われます。
どんなアイデアでも大歓迎です。
clojure - Clojure への変更を提案/議論する正式な方法はありますか?
Clojure への変更を提案/議論する正式な方法はありますか?