【发布时间】:2013-07-30 15:20:10
【问题描述】:
我写了两个这样的函数,但正如你所见,它们大部分是相同的,所以我想写一个宏来简化它们。
教科书里的简单宏例子我都懂,但我自己不会写。
这是我的代码:
(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,拖曳功能工作正常。我不关心变量这是代码的一部分。
【问题讨论】:
-
使用宏去除样板代码,使用函数去除重复代码