2011-01-01 4 views
1

@期待される動作がある私は、組み込みコマンドリーダーマクロを `使用せずに(にunquoteとにunquoteスプライシング付き)バッククォートをリメイクする必要があります。私は共通のlispでバッククォートを再実装できますか?

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

私はマクロでそれを実行しようとしないが、結果は全くあり期待される。

多くの感謝!!!

何ができるかについてのヒント?

(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))))) 

訂正や提案を、それを改善するためにしている:ポール・グレアムのコードを理解しようとしているときに

+0

あなたのご質問はありますか? –

答えて

3

http://lib.store.yahoo.net/lib/paulgraham/glsbq.lispは、十分に簡単で、間違った解決策のために解決が、それは働く人々のために例

+0

うわーはうまいですが、そこには簡単な解決策がありますか? – jneira

+3

簡単な解決策は、読んで理解することです。 – Xach

+0

mmm私は "私は"基本的な宿題のニーズよりも多くの機能をバッククォートの完全なインプリケーションですが、とにかく、私はそれをundestandしようとします – jneira

0

を持っていますようこそ!

関連する問題