2017-01-05 3 views
0

条件に基づいてコレクションに何かを追加し、それ以外の場合はそのままにします。条件付きでコレクションに追加する

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

(make-zoo ["tigers"] false) ;["tigers"] 
(make-zoo ["polar bears"] true) ;["polar bears" "penguins"] 

私はClojureのにはかなり新しいですが、これは一般的な操作のための不格好な解決策のように思える:

は、私自身がこのような何かを書きました。これに対処するよりエレガントな方法はありますか?

答えて

5

我々は->スレッドマクロの条件誘導体cond->マクロを使用してmake-zooを簡素化することができます。

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

一つの単純化は、単に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"] 
関連する問題