THX*_*137 1 functional-programming clojure clojurescript
假设我想要删除列表中的元素,提到禁止使用的集合中的动物:
(def list (atom [{:animal "a quick happy brown fox that rocks!"}
{:animal "a quick happy brown hamster that rocks!"}
{:animal "a quick happy brown bird that rocks!"}
{:animal "a quick happy brown dog and fox that rock!"}
{:animal "a quick happy brown fish that rocks!"}]))
(def banned-from-house (atom ["fox" "bird"]))
Run Code Online (Sandbox Code Playgroud)
最常用的方法是什么?
此外,这个问题的标题会更好吗?(我讨论clojure代码很困难)
让我们一步一步地构建它.
首先,让我们测试一个String是否提到一些动物名称,使用clojure.string/includes?
.
(defn mentions-animal? [s animal]
(clojure.string/includes? s animal))
(mentions-animal?
"a quick happy brown fox that rocks!"
"fox")
=> true
(mentions-animal?
"a quick happy brown fox that rocks!"
"dog")
=> false
Run Code Online (Sandbox Code Playgroud)
其次,让我们测试一个字符串是否提到了一些 seq的动物名称clojure.core/some
.
(defn mentions-any? [s animals]
(some #(mentions-animal? s %) animals))
(mentions-any?
"a quick happy brown fox that rocks!"
#{"fox" "dog"})
=> true
(mentions-any?
"a quick happy brown fox that rocks!"
#{"cat" "dog"})
=> nil
Run Code Online (Sandbox Code Playgroud)
接下来,将此逻辑扩展到动物贴图而不是字符串.
(defn animal-mentions-any?
[a animals]
(mentions-any? (:animal a) animals))
Run Code Online (Sandbox Code Playgroud)
最后,使用clojure.core/remove
以下方法实现过滤逻辑:
(defn remove-banned-animals
[animals-list banned-animals]
(remove #(animal-mentions-any? % banned-animals) animals-list))
(remove-banned-animals
[{:animal "a quick happy brown fox that rocks!"}
{:animal "a quick happy brown hamster that rocks!"}
{:animal "a quick happy brown bird that rocks!"}
{:animal "a quick happy brown dog and fox that rock!"}
{:animal "a quick happy brown fish that rocks!"}]
["fox" "bird"])
=> ({:animal "a quick happy brown hamster that rocks!"} {:animal "a quick happy brown fish that rocks!"})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
83 次 |
最近记录: |