Clojure 有条件地添加到集合中

Clojure 有条件地添加到集合中,clojure,Clojure,我想根据一个条件向集合中添加一些内容,否则就不做了 我发现自己在写这样的东西: 德芬制作动物园 [动物园有冰] let[动物园如果有冰康动物园企鹅动物园] 动物园 使动物园[老虎]虚假;[老虎] 让动物园[北极熊]成为现实;[北极熊企鹅] 我对Clojure很陌生,但对于一个普通的操作来说,这似乎是一个笨拙的解决方案。有没有更优雅的方法来解决这个问题?一种简化方法是省去let语句: (defn make-zoo [zoo has-ice] (if has-ice (conj zo

我想根据一个条件向集合中添加一些内容,否则就不做了

我发现自己在写这样的东西:

德芬制作动物园 [动物园有冰] let[动物园如果有冰康动物园企鹅动物园] 动物园 使动物园[老虎]虚假;[老虎] 让动物园[北极熊]成为现实;[北极熊企鹅]
我对Clojure很陌生,但对于一个普通的操作来说,这似乎是一个笨拙的解决方案。有没有更优雅的方法来解决这个问题?

一种简化方法是省去let语句:

(defn make-zoo
  [zoo has-ice]
  (if has-ice
    (conj zoo "penguins")
    zoo))

(make-zoo ["tigers"] false) => ["tigers"]
(make-zoo ["polar bears"] true) => ["polar bears" "penguins"]
我们可以使用cond->macro简化make zoo,cond->macro是->threading宏的条件派生:

(defn make-zoo [zoo has-ice]
  (cond-> zoo, has-ice (conj "penguins")))