Вы уже на правильном пути, поэтому я попытаюсь объяснить, что будет дальше:
Функция clojure.string/split
возвращает vector
строк.Вектор в Clojure представляет собой коллекцию , которая реализует интерфейс Java java.util.List
, поэтому все готово, если все, что вам нужно, - это преобразовать содержимое файла в коллекцию строк, представляющих числа (чтобы превратить их вфактические числа, читайте дальше).
Возможно, вы хотите манипулировать элементами как фактические числа.В Clojure вам нужно использовать некоторую функцию, чтобы превратить каждую строку в число (скажем, "34"
в фактическое число 34).Есть два простых способа: использовать взаимодействие с Java и вызвать Integer.parseInt(...)
или использовать функцию, предоставленную Clojure, которая может читать строку и возвращать все, что она представляет (например, read-string
).
Поскольку мынеобходимо вызвать функцию (read-string
) для каждого элемента списка строк, представляющих числа, мы будем использовать map
, функцию, которая принимает функцию f
и коллекцию xs
, и вызывает функциюf
для каждого элемента xs
, возвращая результат в виде другого списка.
Если мы склеим все это вместе, это будет примерно так (я буду использовать let
для присвоения именпромежуточные результаты):
(let [file-contents (slurp "C:\\Users\\XXX\\Desktop\\100.txt")
nums-as-strings (clojure.string/split file-contents #" ")
numbers (map read-string nums-as-strings)]
... здесь список чисел будет на numbers
;и теперь вы можете выполнять над ними операции, например, суммировать их все:
(reduce + numbers) ;; Compute the sum of all the numbers
Существует ряд мелких деталей, которые я замаскировал, но это должно поставить вас на правильный путь.