Convertir une séquence de chaînes en entiers (Clojure)

J'ai actuellement un problème où je dois lire un fichier texte à partir de la ligne de commande contenant au moins un entier. Je lis le fichier, en faisant une correspondance d'expression régulière pour ignorer les espaces.

(re-seq #"[0-9]+" (slurp (first *command-line-args*)))

Après cela, je dois écrire une fonction entière juste pour convertir cette séquence de chaînes en une séquence d'entiers. Apparemment, je ne peux pas mapper Integer. à la séquence (sauf si j'utilise la carte de manière incorrecte).

Y a-t-il une façon élégante de gérer cela, quelque chose de similaire à carte? Ou dois-je passer par récursivement en premier et le lancer à Integer. pour que cela fonctionne?

J'apprends actuellement Clojure, et comme j'apprends des bits, je reviens et je fais de petits quiz de programmeur que j'avais l'habitude de prendre d'autres langues.

26
demandé sur Peter Mortensen 2011-01-17 18:35:42

1 réponses

Vous cherchez Integer/parseInt.

user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"])
(1 2 3 4)

Vous devez envelopper Integer/parseInt dans une fonction anonyme car les méthodes Java ne sont pas des fonctions.

read-string fonctionne également dans ce cas:

user=> (map read-string ["1" "2" "3" "4"])
(1 2 3 4)

read-string lit n'importe quel objet à partir d'une chaîne, pas seulement des entiers. Donc, si tu le faisais (read-string "1.0") Tu récupérerais un double. Lors de la lecture à partir de sources extérieures, il est généralement préférable de limiter ce qui peut être lu à ce dont vous avez besoin, qui est un entier dans ce cas. Par conséquent, je recommande d'utiliser mon premier exemple.

46
répondu Rayne 2011-01-17 15:41:57