2017-08-02 24 views
0

私はEmacs Lispでマクロを作成しようとしていますが、引用符で囲まれているかどうかを確認するのは難しいです。シンボルが引用されているかどうかを確認する方法はありますか?

実際、私はquote-only-if-is-not-quotedマクロのようなものが必要です。そんなことは何ですか?私はLispの方言でそれについて何も見つけられませんでした。マクロの例:

(quote-only-if-is-not-quoted 'q) => (quote q) 
(quote-only-if-is-not-quoted q) => (quote q) 

ありがとうございます。

+3

「quotedness」は概念ではないため、「シンボルが引用されているかどうか」という概念は無意味です。 'quote'は特別な形式として評価されると、データムの評価を無効にします。それは他の特別な意味を持ちません。そして、elispマクロには、 "quoted"シンボルは、最初のものが 'quote'である2つのシンボルを含むリストに過ぎません。より多くの文脈がなければ、あなたが解決しようとしている問題は非常に混乱しています。 –

+0

答え、ありがとう。私は[マクロ](https://gist.github.com/ryukinix/f8b2231d1f2e3e8b95e4bb3312be5370)を2つの方法で動作させるようにしています:(いつシステムのlinux ...)と(いつシステムのlinux ...)。言い換えれば、最初の引数は、引用符付きのシンボルとして渡されない場合にのみ引用できます。しかし、あなたが答えたやり方では、これは不可能だと私は考えています。 –

答えて

2

マクロの引数はで、評価されていませんです。したがって、引数が引用されているかどうかを確認し、引用されていない場合は引用します。このようなもの?

(defmacro quote-only-if-is-not-quoted (arg) 
    (if (and (consp arg) 
      (eq (car arg) 'quote)) 
     arg 
    `(quote ,arg))) 
+0

まさにそれ!ありがとうございました! –

関連する問題