2017-10-09 1 views
2

Fondamentalement, je veux appliquer f sur x pour n fois et je suis seulement intéressé par le résultat. Yat-il un meilleur moyen que (nth (iterate f x) n)?Appliquer une fonction n fois sur une valeur de départ

+1

C'est déjà assez succinct et lisible. Sauf si vous jouez au golf, je ne pense pas que vous obtiendrez beaucoup mieux que cela. Si vous pensez que c'est trop, vous pouvez toujours le ranger dans une fonction. – Carcigenicate

+0

Il arrive souvent que je ne m'intéresse qu'au résultat d'itérer. Je me demandais s'il y avait déjà une manière plus expressive intégrée que je supervise, quelque chose comme '(dotimes nx body)' –

+0

Si ce n'est pas déjà fait, je vais juste commencer votre propre bibliothèque, et y coller une fonction de raccourci . Je ne peux pas voir une meilleure façon "brute" d'exprimer cela. "La ième itération de f sur x" se lit déjà plutôt bien. – Carcigenicate

Répondre

2

comme l'ont dit les commentateurs, votre solution est déjà correcte. une autre option est d'utiliser comp, comme celui-ci peut-être:

user> (defn n-times [n f] 
     (apply comp (repeat n f))) 
#'user/n-times 

user> ((n-times 10 inc) 1) 
;;=> 11 

encore je ne peux pas vraiment dire si elle est mieux que la vôtre dans tous les aspects. Peut-être un peu plus fonctionnel [ish]