我刚开始阅读《Let over lambda》一书,想尝试写一个Clojure版本的闭包章节中的块扫描器。
目前为止,我有以下代码:
(defn block-scanner [trigger-string]
(let [curr (ref trigger-string) trig trigger-string]
(fn [data]
(doseq [c data]
(if (not (empty? @curr))
(dosync(ref-set curr
(if (= (first @curr) c)
(rest @curr)
trig)))))
(empty? @curr))))
(def sc (block-scanner "jihad"))
我觉得这个可以运行,但我想知道我做对了哪些地方,以及我能做得更好的地方。