みんな、最初にコードを見てください:
(defmacro map-remove- [v w]
`(dosync
(ref-set ~v (dissoc @~v (keyword ~w)))))
(defmacro set-remove- [v w]
`(dosync
(ref-set ~v (disj @~v ~w))))
(defmacro clean- [v]
`(dosync
(ref-set ~v (empty @~v))))
現在は問題なく動作していますが、「map-remove-」と「set-remove-」を 1 つに結合する、より一般的なマクロを作成したいと考えています。私のC / Javaの経験によると、「ケース」を選択しましたが、明らかにケースはマクロ定義で使用できません。「テスト定数は評価されません。コンパイル時のリテラルでなければなりません」、次のコードは機能しません:
(defmacro [x]
(case (type x) ;;;;;;;;;;; This will never work!directly reach to default clause
....))
誰か提案はありますか?とても感謝しています。