1

組み込みのリーダーマクロ`、@を使用せずに、(引用符なしと引用符なしのスプライシングを使用して)バッククォートを再作成する必要があります。予想される動作は次のとおりです。

> (BACKQUOTE (A B (LIST ‘C ‘D) (COMA (LIST ‘E ‘F)
                               (COMA-AT (LIST ‘G ‘H)))
(A B (LIST ‘C ‘D) (E F) G H)

私はマクロでそれをやろうとしましたが、結果は期待されていません。

どうもありがとう!!!

何ができるかについてのヒントはありますか?

4

2 に答える 2

3

http://lib.store.yahoo.net/lib/paulgraham/glsbq.lispに例があります

于 2011-01-01T22:55:01.077 に答える
0

単純で間違った解決策にうまく落ち着くが、ポール・グレアムのコードを理解しようとしている間にそれが機能する人のために:

(defmacro backquote (expr)
  (labels
      ((step (p n)
             (append p
                     (if (atom n) (list n)
                       (case (car n)
                         ('comma (list (eval (cadr n))))
                         ('comma-at (eval (cadr n))))))))
    (list 'quote (reduce #'step (cons () expr)))))

それを改善するための修正や提案は大歓迎です!

于 2011-01-06T22:15:09.863 に答える