6
votes

Répéter des vecteurs dans le clojure

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])


2 commentaires

Il n'y a rien de non fonctionnel sur l'utilisation de la valeur d'un VaR à l'intérieur du formulaire def 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 :-).


4 Réponses :


2
votes

(non testé!) xxx

sauve le tour.

concat concaténer 2 listes; Appliquer peut être utilisé pour faire face à une fonction donnée dans la position de tête d'une liste existante pour évaluation.


3 commentaires

Correction du nom de la fonction ( assoc -> Appliquer ).


Oh, comment stupide de moi. J'utilise appliquer tout le temps, vous penseriez que je connais son nom maintenant ... merci pour le correctif!


(répliqué doc) à partir de Clojure 1.7 dit obsolète: Utilisez "Répétition" à la place.



2
votes

Un peu d'expérimentation avec le repli me conduit à cette solution: xxx


0 commentaires

8
votes

concat vous donne un SEQ paresseux. Si vous voulez vous retrouver avec un vecteur (non paresseux) à la place: xxx

selon que vous accédez à cela par index beaucoup ou en itération, soit un vecteur ou un SEQ pourrait Soyez plus approprié.

Il y a toujours cycle aussi, si vous voulez un flux sans fin (paresseux) d'éléments répétés: xxx


1 commentaires

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 :-).



1
votes
(take (* 2 (count suits)) (cycle suits))

0 commentaires