このように 2 つの関数を書きましたが、ご覧のとおり、ほとんどの部分が同じなので、単純化するマクロを書きたいと思います。
教科書の簡単なマクロの例は理解できますが、自分で書く方法がわかりません。
これが私のコードです:
(defn load-dict
; "Load database from a txt file previous saved"
[fname]
(with-open [rdr (io/reader fname)]
(doseq [line (line-seq rdr)]
(println line)
(def vvv (clojure.string/split line #"\s"))
;(println (str "count of vvv is " (count vvv)))
(if (< 1 (count vvv))
(add- dict (gen-word (nth vvv 0) (nth vvv 2) (nth vvv 1))))
)))
(defn load-article
; "Load article from a txt file"
[fname]
(with-open [rdr (io/reader fname)]
(doseq [line (line-seq rdr)]
(println line)
(def vvv (clojure.string/split line #"\s"))
;(println (str "count of vvv is " (count vvv)))
(if (< 1 (count vvv))
(add- article vvv ))
)))
次のようなマクロを作成する必要があります。
(defmacro load- [target fname &expr)
`(...
(add- ~target expr)))
私は実際にそのようなマクロを書く方法を知りません。私は重複したコードが嫌いです。
PS、牽引機能は正常に動作します。これがコードの一部である変数は気にしません。