2017-08-09 1 views
0

Y at-il une fonction qui existe dans clojure similaire à réduire, mais qui peut passer dans une variable? Par exemple, disons que je voulais implémenter ma propre fonction de filtre et passer un prédicat pour vérifier toute la collection et conserver les valeurs qui satisfont le prédicat, y a-t-il une manière idiomatique de le faire en utilisant réduire?Comment gérer le besoin de passer des variables à une fonction de réduction?

Je pense serait de faire ce qui suit:

(->> coll 
    (map #(:val % :pred pred)) 
    (reduce my-filter-fn {:val 0 :pred pred})) 

Essentiellement simplement la création d'une collection de cartes qui ont la valeur que je dois passer dans la diminution de la fonction.

J'ai trouvé le cas d'utilisation de devoir passer des valeurs à la fonction de réduction assez fréquemment, mais cela peut être dû au fait que je ne pense pas à la manière fonctionnelle appropriée. Y a-t-il une solution plus idiomatique?

+3

Je ne comprends pas vraiment ce que vous essayez de faire. Pouvez-vous ajouter un exemple de avant/après avec des données? –

Répondre

1

Que mon filtre-fn être un amusement trois arité et utilisation partielle

(reduce (partial my-filter-fn pred) 0) 

Mais il semble aussi que vous pouvez utiliser le filtre au lieu de réduire

(->> coll 
      (filter pred) 
      (reduce my-fn)