Преобразование последовательности строк в целые числа (Clojure)
В настоящее время у меня проблема, когда я должен прочитать текстовый файл из командной строки, содержащий хотя бы одно целое число. Я читаю файл, выполняя регулярное выражение, чтобы игнорировать пробелы.
(re-seq #"[0-9]+" (slurp (first *command-line-args*)))
После этого мне нужно написать целую функцию, чтобы преобразовать эту последовательность строк в последовательность целых чисел. По-видимому, я не могу сопоставить Integer.
с последовательностью (если я неправильно использую карту).
Есть ли какой-то элегантный способ справиться с этим, что-то похожее на карту? Или мне нужно сначала рекурсивно выскочить и отбросить его до Integer.
, чтобы заставить это работать?
В настоящее время я изучаю Clojure, и когда я изучаю биты, я возвращаюсь назад и делаю небольшие викторины программистов, которые я использовал для поиска других языков.
Ответы
Ответ 1
Вы ищете Integer/parseInt
.
user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"])
(1 2 3 4)
Вы должны обернуть Integer/parseInt
в анонимную функцию, потому что методы Java не являются функциями.
read-string
также будет работать в этом случае:
user=> (map read-string ["1" "2" "3" "4"])
(1 2 3 4)
read-string
читает любой объект из строки, а не только целых чисел. Итак, если вы сделали (read-string "1.0")
, вы получите двойной. При чтении из внешних источников обычно лучше ограничивать то, что можно прочитать точно, что вам нужно, что в этом случае является целым числом. Поэтому я рекомендую использовать мой первый пример.