A Spam Filter(Part 1)

開始前

其實這個東西并不是Spam Filter的核心,因為這樣只是展示了一種簡單的數據存儲的方式。atom 這種方式是可以使用數據庫來代替的,那些DSL會更加方便,在這里只不過跟著教程在跑了一遍基礎。

Build A Record

(defrecord People [name cnt])

defrecord 宏可以用來定義一個記錄,而 name、cnt 就是 People 的屬性。

Store A Record

(def a (atom #{}))
(swap! a conj (People. "banana" 0))

atom 類型的 a 其實是一個可變的 hashset。意味著你可以對這個 hashset 進行操作。

Query A Record

(defn sq [ds key]
  (first (filter #(= key (.name %)) ds)))
; (sq @a "banana")

找到 name == “banana” 這條記錄。

Update A Record

(swap! a (partial replace 
  {(sq @a "banana") 
  (update-in (sq @a "banana") [:cnt] inc)}))

更新這條記錄的方式。

寫在最后但是很重很重要(Last But Not Least)

知乎有一句話說的好

先問是不是,再問為什么

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容