Je suis un clojure débutant. J'essaie d'obtenir deux copies d'un vecteur de costumes de cartes. Le non- SECT WAY que je peux trouver est
([:clubs :diamonds :hearts :spades] [:clubs :diamonds :hearts :spades])
4 Réponses :
(non testé!) sauve le tour. p> concat code> concaténer 2 listes;
Appliquer CODE> peut être utilisé pour faire face à une fonction donnée dans la position de tête d'une liste existante pour évaluation. P> P>
Correction du nom de la fonction ( assoc code> ->
Appliquer code>).
Oh, comment stupide de moi. J'utilise appliquer code> tout le temps, vous penseriez que je connais son nom maintenant ... merci pour le correctif!
(répliqué doc) code> à partir de Clojure 1.7 dit
obsolète: Utilisez "Répétition" à la place. Code>
Un peu d'expérimentation avec le repli me conduit à cette solution:
selon que vous accédez à cela par index beaucoup ou en itération, soit un vecteur ou un SEQ pourrait Soyez plus approprié. p> Il y a toujours concat code> vous donne un SEQ paresseux. Si vous voulez vous retrouver avec un vecteur (non paresseux) à la place:
cycle code> aussi, si vous voulez un flux sans fin (paresseux) d'éléments répétés: p>
J'ai aussi monté (prendre 8 (costumes de cycle)). Semble travailler, mais je devais comprendre la partie "8" moi-même, sans l'aide d'un ordinateur :-).
(take (* 2 (count suits)) (cycle suits))
Il n'y a rien de non fonctionnel sur l'utilisation de la valeur d'un VaR à l'intérieur du formulaire code> def code> créant un autre var. En fait, c'est la chose naturelle à faire si le deuxième var dépend du premier. Bien sûr, si vous souhaitez une méthode générale de concaténation n des copies d'un SEQ, où n peut-être ou non être connue à l'avance, vous avez besoin d'une meilleure solution (comme indiqué dans les réponses ici).
En fait, c'est ce que je voulais dire (n copies). Je conviens que ma fonction à deux fois est "fonctionnelle" - il n'est tout simplement pas pratique si je veux 100 copies :-).