0

みんな、最初にコードを見てください:

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

誰か提案はありますか?とても感謝しています。

4

1 に答える 1