Преобразование последовательности строк в целые числа (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"), вы получите двойной. При чтении из внешних источников обычно лучше ограничивать то, что можно прочитать точно, что вам нужно, что в этом случае является целым числом. Поэтому я рекомендую использовать мой первый пример.