J'essaie de lier la grille suivante à un symbole
(def grid [08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48])
5 Réponses :
Les zéros principaux impliquent un nombre octal, de sorte que 08 n'est pas valide. De nombreuses langues de programmation utilisent cette convention, commençant par c. P>
Oui, cela semble complètement archaïque. Peut-être laissé-pad avec des espaces?
Les numéros avec un 0 précédent sont lus comme si ils sont là où dans la base 8, tout charcter ne fonctionne pas entre 0 et 7 ne fonctionnera pas. Pour résoudre ce problème, vous pouvez appendez 10R08 à l'explicitement Spécifiez la base.
user> 10r08 8 user> 08 ; Evaluation aborted.
Une macro ne peut rien faire sur les exceptions de lecture, car les macros sont élargis après la fin du lecteur de son travail. Par exemple. Après (défmacro foo [x] nil) code>,
(foo 123) code> évalue vers
nil code>, mais
(foo 08) code > jette une exception d'exception (une drôle d'exception «à deux niveaux», en fait, illustrant bien les fonctionnements récursifs du lecteur).
Cela semble atteindre beaucoup de temps; Je me demande pourquoi la Convention est de supposer une base beaucoup moins commune.
Puisque vous résolvez un problème de projet Euler, vous ne voudrez peut-être pas la lire, même si ce n'est que sur la "Comment lire dans les données?" Une partie de celle-ci ... p>
La raison pour laquelle cela se produit est comme expliqué dans les autres réponses. La solution correcte serait d'intégrer l'entrée dans votre code sous forme de chaîne - avec des chevrefeaux! - et utilisez quelque chose comme ce qui suit: p> Ceci devrait produire un vecteur de vos numéros. Pour un vecteur à deux dimensions, vous pouvez remplacer le Si vous préférez mettre l'entrée dans un fichier séparé et que vous avez clojure, lisez-la à partir de là, remplacez mapcat code> avec une carte
régulière CODE> et mettez un
supplémentaire
(carte VEC) code> avant la finale < Code> VEC code>. p>
la chaîne code> et < / em>
(. Split # "\ n") code> avec un appel à
ligne-SEQ code> sur un lecteur sur votre fichier.x p> h2>
J'ai quelques problèmes à l'aide de la méthode - >> code>:
exception dans le fil "Main" Java.lang.Exception: impossible de résoudre le symbole: - >> Dans ce contexte (11.clj : 25) code>
Je ne pense pas que le - >> existait jusqu'à la clojure 1.1. Vous pouvez utiliser une ancienne version de Clojure.
Ouais, j'utilise Clojure 1.0.0 via les référentiels Ubuntu
Est-ce que le (goutte partielle est vide?) Code> Strip Whitespace? Je ne peux pas comprendre ce que c'est censé faire.
expressions régulières supprimera les zéros de premier plan la phrase de regex se décompose comme suit: p> une expression plus générale est p> qui fait la même chose, mais dans la partie "ou" ou ", il utilise des aspirations de lunettes de vue positive et des assertions à la recherche pour rechercher une séquence d'un ou plusieurs zéros précédés et suivis d'une blancheur. p> avec le principal zéros dépouillé (carte lecture-chaîne (re-SEQ ....)) code> fonctionne juste bien p> p>
Comme il ne fallut que 3 minutes environ pour supprimer tous les plus grands zéros, je vais juste coller le vecteur ci-dessus avec les zéros supprimés au cas où quelqu'un d'autre souhaite copier / coller le problème d'Euler.
Suggérer des solutions de contournement dépendra de ce que vous essayez finalement de faire (c'est-à-dire au-delà du rembourrage avec des zéros).
J'essaie simplement de résoudre un problème de projet Euler, et je ne veux pas formater manuellement cette grande grille méchante. Je m'en fiche si les zéros sont préservés en interne ou non, je veux juste coller cette ventouse dans un fichier ou un def, puis pour pouvoir travailler avec elle comme un vecteur régulier d'entiers.
Les virgules sont des espaces, de sorte que vous pourriez les utiliser pour remplacer les zéros: (grid-string-string "\\ S0" ",") Éditer: Duh, ou juste les remplacer par des espaces ... j'ai besoin de plus de café.