Clojure - конвертировать строку в вектор целых чисел - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь проанализировать файл и использовать каждую строку для выполнения любого количества функций и параметров. Функции, которые я хочу вызвать, принимают два вектора векторов целых чисел для умножения матриц. Я могу разобрать аргументы в один вектор, чтобы я мог вызвать apply и символ разрешенной функции. Но мне все еще нужно преобразовать аргументы из строк в соответствующий тип. Как мне этого добиться?

Пример заголовка функции:

(defn ijk [[& matrixA] [& matrixB]]
   ...
  )

Пример входного файла: (разделение строки запятыми)

ijk,[[1 2] [3 4]],[[1 2] [3 4]]
kij,[[2 2] [3 4]],[[1 2] [3 4]]

Как я читаю файл до сих пор:

(defn get-lines [fname]
  (with-open [r (reader fname)]      
    (loop [file (line-seq r)]
      (if-let [[line & file] file]
        (do (let [[command & args] (str/split line #",")]
              ;apply (resolve (symbol command)) (vec args))    
              )
            (recur file))
        file))))

Формат (vec args):

[[[1 2] [3 4]] [[1 2] [3 4]]]
[[[2 2] [3 4]] [[1 2] [3 4]]]

Мне нужно преобразовать каждую матрицу в векторе args в вектор векторов целых чисел выше. Любая и вся помощь очень ценится этим Clojure noob!

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете использовать clojure.edn/read-string для разбора строк в структуры данных:

(def args ["[[1 2] [3 4]]"
           "[[1 2] [3 4]]"])
(mapv clojure.edn/read-string args)
=> [[[1 2] [3 4]] [[1 2] [3 4]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...