7

Common Lisp では、マクロ定義マクロを作成するのは比較的簡単です。たとえば、次のマクロ

(defmacro abbrev (short long)
  `(defmacro ,short (&rest args)
     `(,',long ,@args)))

別のマクロに展開されるため、マクロ定義マクロです。

今置くと

(abbrev def defun) 

私たちのプログラムでは、新しい関数を定義するたびにdef代わりに書くことができます。defunもちろん、abbrevそれ以外にも使えます。たとえば、

(abbrev /. lambda)

(/. (x) (+ x 1))の代わりに書くことができます(lambda (x) (+ x 1))。良い。(略語の詳細な説明については、http://dunsmor.com/lisp/onlisp/onlisp_20.htmlを参照してください)

さて、私の質問は次のとおりです。

  1. Racket でマクロ定義マクロを作成できますか?
  2. できる場合は、どうすればよいですか?(例えば、 abbrevRacket でマクロに似たものを書く方法は?)
4

3 に答える 3

0

名前の変更は、define または let ステートメントで簡単に実行できることがわかりました。

(define =? =)
(define lr list-ref)

また:

(let ((=? =)
      (lr list-ref))
  (println (lr '(1 2 3) 2))
  (println (=? 1 2))
  (println (=? 1 1)))

出力:

3
#f
#t

この目的のためのマクロは必要ないようです。

于 2016-10-18T02:30:31.993 に答える