マクロレットは、ローカルで定義されたマクロ間の再帰呼び出しを禁止していますか?

user3414663

彼の著書ANSICommon Lisp、p.320で、Paul Grahamは次のように書いていますmacrolet「同様fletに、ローカルマクロは互いに呼び出すことはできません。」

多分私はこれを誤解しているかもしれませんが、私はそれが真実である可能性がある方法を考えることができません。マクロは相互に拡張するほど相互に呼び出しを行うことはなく、マクロ拡張の性質上、スコープで定義されているすべてのマクロが拡張されるまで継続します。

次のようなコードは、私が試したCommonLispのすべての実装においてGrahamと一致しません。

(macrolet ((jump (x) `(car ,x))
           (skip (x) `(jump ,x))
           (hop (x) `(skip ,x)))
  (hop '(1 2 3))) 

=> 1

(macrolet ((yin (n x)
             (if (zerop n)
                 `(cdr ,x)
                 `(yang ,(1- n) ,x)))
           (yang (n x)
             (if (zerop n)
                 `(car ,x)
                 `(yin ,(1- n) ,x))))
      (yin 6 '(1 2 3)))

=> (2 3)

グラハムの発言は誤りですか?

マリスパー

によって定義されたマクロが、同じで定義された別のマクロの使用macrolet拡張されも問題ありませんmacroletで定義されたマクロmacroletが、同じで定義された別のマクロを直接使用することは正しくありませんmacrolet例えば:

(macrolet ((jump (x) `(car ,x))
           ;; Okay since skip expands into jump.
           (skip (x) `(jump ,x)))
  (skip '(1 2 3))) 

=> 1

とは対照的に

(macrolet ((jump (x) `(car ,x))
           ;; Wrong since skip uses jump directly.
           (skip (x) (jump x)))
  (skip '(1 2 3))) 

=> Error: The function COMMON-LISP-USER::JUMP is undefined.

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

再帰的に呼び出されるLotusscript関数では、ローカル変数は独立していますか?

分類Dev

テストファイルがモジュールとして定義されている場合、スタックで呼び出されたhspec定義のテストはエラーをスローします

分類Dev

msbuild-ブロックで定義されたすべてのプロパティをMSBuild呼び出しにエクスポートします

分類Dev

msbuild-ブロックで定義されたすべてのプロパティをMSBuild呼び出しにエクスポートします

分類Dev

実行時にPlug.Routerマクロで定義されたルートを呼び出すにはどうすればよいですか?

分類Dev

定義されている括弧の代わりに角括弧を使用してvecマクロを呼び出すのはなぜですか?

分類Dev

小枝テンプレートでの再帰的なマクロ呼び出し

分類Dev

クローラーに再帰呼び出しをさせるにはどうすればよいですか?

分類Dev

Javascriptオブジェクトに「グローバル」ゲッター/セッターメソッドを定義して、プロパティが取得/設定されるたびに呼び出されるようにすることは可能ですか?

分類Dev

スレッドプールを使用しているときに、boost :: asyncブロックへのネストされた呼び出しがなぜですか?

分類Dev

403ローカルGoogle Cloud Storage呼び出しで禁止されています

分類Dev

jprofilerまたはその他:再帰的なメソッド呼び出しをロールアップするにはどうすればよいですか?

分類Dev

Ansible Jinja2テンプレートでマクロ呼び出し間の余分な空白を削除するにはどうすればよいですか?

分類Dev

サブプロセスpythonマルチスレッド呼び出しから昇格された特権でbashスクリプトを実行します

分類Dev

()私は、BarChartコントロールのいずれかのバーやどこかをクリックするたびに呼び出している)(代わりにonNothingSelected、BarChartコントロールに呼び出しされていないonValueSelected

分類Dev

Vimでのメソッド定義または呼び出しの間のピリオドをマークする構文ハイライトルール

分類Dev

デッドロックが発生したときにプロシージャを再帰的に呼び出すにはどうすればよいですか?

分類Dev

RecyclerViewがレイアウトを計算している間、またはrecyclerviewから項目を削除しようとするとスクロールしている間は、このメソッドを呼び出すことができません

分類Dev

CommonLispで関数と関数呼び出しのセットを定義するマクロを定義する

分類Dev

呼び出されたプログラムは、呼び出し側プログラムで変数を記述または定義していますか?

分類Dev

PHPで長時間実行されているネットワーク呼び出しは、プロセッサコアを拘束しますか?

分類Dev

ユーザー入力を介して累積的に再帰する場合、最後の呼び出しで設定されたローカル変数の値をどのように使用しますか?

分類Dev

ロールバックを実行しなかったのに、「AutoCommitモードが「true」に設定されているとロールバック操作を呼び出せない」と表示されるのはなぜですか。

分類Dev

ループマクロから再帰呼び出しを行う

分類Dev

Cは、再帰的にではなく1回だけ処理されるマクロを定義します。

分類Dev

ブック内で開いているすべてのワークシートに対して実行される関数を呼び出すマクロ

分類Dev

定義されているのと同じファイルでマクロを使用するためのトリックはありますか?

分類Dev

Jest-ローカルストレージのチェックは、モックされている非同期関数で呼び出されます

分類Dev

マルチプロセッシングによって呼び出された関数がメッセージを出力しないのはなぜですか?

Related 関連記事

  1. 1

    再帰的に呼び出されるLotusscript関数では、ローカル変数は独立していますか?

  2. 2

    テストファイルがモジュールとして定義されている場合、スタックで呼び出されたhspec定義のテストはエラーをスローします

  3. 3

    msbuild-ブロックで定義されたすべてのプロパティをMSBuild呼び出しにエクスポートします

  4. 4

    msbuild-ブロックで定義されたすべてのプロパティをMSBuild呼び出しにエクスポートします

  5. 5

    実行時にPlug.Routerマクロで定義されたルートを呼び出すにはどうすればよいですか?

  6. 6

    定義されている括弧の代わりに角括弧を使用してvecマクロを呼び出すのはなぜですか?

  7. 7

    小枝テンプレートでの再帰的なマクロ呼び出し

  8. 8

    クローラーに再帰呼び出しをさせるにはどうすればよいですか?

  9. 9

    Javascriptオブジェクトに「グローバル」ゲッター/セッターメソッドを定義して、プロパティが取得/設定されるたびに呼び出されるようにすることは可能ですか?

  10. 10

    スレッドプールを使用しているときに、boost :: asyncブロックへのネストされた呼び出しがなぜですか?

  11. 11

    403ローカルGoogle Cloud Storage呼び出しで禁止されています

  12. 12

    jprofilerまたはその他:再帰的なメソッド呼び出しをロールアップするにはどうすればよいですか?

  13. 13

    Ansible Jinja2テンプレートでマクロ呼び出し間の余分な空白を削除するにはどうすればよいですか?

  14. 14

    サブプロセスpythonマルチスレッド呼び出しから昇格された特権でbashスクリプトを実行します

  15. 15

    ()私は、BarChartコントロールのいずれかのバーやどこかをクリックするたびに呼び出している)(代わりにonNothingSelected、BarChartコントロールに呼び出しされていないonValueSelected

  16. 16

    Vimでのメソッド定義または呼び出しの間のピリオドをマークする構文ハイライトルール

  17. 17

    デッドロックが発生したときにプロシージャを再帰的に呼び出すにはどうすればよいですか?

  18. 18

    RecyclerViewがレイアウトを計算している間、またはrecyclerviewから項目を削除しようとするとスクロールしている間は、このメソッドを呼び出すことができません

  19. 19

    CommonLispで関数と関数呼び出しのセットを定義するマクロを定義する

  20. 20

    呼び出されたプログラムは、呼び出し側プログラムで変数を記述または定義していますか?

  21. 21

    PHPで長時間実行されているネットワーク呼び出しは、プロセッサコアを拘束しますか?

  22. 22

    ユーザー入力を介して累積的に再帰する場合、最後の呼び出しで設定されたローカル変数の値をどのように使用しますか?

  23. 23

    ロールバックを実行しなかったのに、「AutoCommitモードが「true」に設定されているとロールバック操作を呼び出せない」と表示されるのはなぜですか。

  24. 24

    ループマクロから再帰呼び出しを行う

  25. 25

    Cは、再帰的にではなく1回だけ処理されるマクロを定義します。

  26. 26

    ブック内で開いているすべてのワークシートに対して実行される関数を呼び出すマクロ

  27. 27

    定義されているのと同じファイルでマクロを使用するためのトリックはありますか?

  28. 28

    Jest-ローカルストレージのチェックは、モックされている非同期関数で呼び出されます

  29. 29

    マルチプロセッシングによって呼び出された関数がメッセージを出力しないのはなぜですか?

ホットタグ

アーカイブ