Вам нужно будет уточнить структуру данных, чтобы assoc-in
работал с ней. Такие функции, как assoc-in
и update-in
, работают с вложенными структурами данных ключ-значение, такими как карты и векторы. Я бы порекомендовал функцию приема, как показано ниже:
(defn create-maze [m]
(into [] (map vec) m))
Это дает вам вектор векторов, схожий по природе с двумерным массивом. Затем вы можете предоставить вспомогательную функцию для вывода лабиринта на экран:
(defn print-maze [m]
(doseq [line m]
(->> line (apply str) println)))
Теперь, когда у вас есть способ вернуться назад и вперед из строкового представления, теперь вы можете использовать assoc-in
в промежуточной форме для создания лабиринтов с измененным содержимым:
(->
(create-maze data)
(assoc-in [0 0] \+)
(assoc-in [3 4] \+)
print-maze)