Итак, я знаю, что это не лучший метод решения этой проблемы, но я пытаюсь просмотреть список строк из входного файла, который в конечном итоге является выражением. У меня есть список выражений, и каждое выражение имеет собственный список благодаря функции split-the-list. Следующим шагом будет замена символов на id
, ints с int
и + или - с addop
. У меня есть регулярные выражения, чтобы определить, соответствуют ли мои символы любым из них, но когда я пытаюсь их заменить, я могу получить только последний цикл цикла, который я вызываю, чтобы оставить какие-либо длительные результаты. Я знаю, что это значит, так это то, как работает функциональное программирование, но я не могу окунуться в трассировку этой программы и как заменить каждый отдельный тип ввода и сохранить результаты в одном списке.Новичок в clojure: токенизация списков разных символов
(def reint #"\d++")
(def reid #"[a-zA-Z]+")
(def readdop #"\+|\-")
(def lines (into() (into() (clojure.string/split-lines (slurp "input.txt")))))
(defn split-the-line [line] (clojure.string/split line #" "))
(defn split-the-list [] (for [x (into [] lines)] (split-the-line x)))
(defn tokenize-the-line [line]
(for [x line] (clojure.string/replace x reid "id"))
(for [x line] (clojure.string/replace x reint "int"))
(for [x line] (clojure.string/replace x readdop "addop")))
(defn tokenize-the-list [] (for [x (into [] (split-the-list))] (tokenize-the-line x)))
И, как вы, вероятно, можете сказать, я довольно новичок в функциональном программировании, поэтому любые советы приветствуются!
Почему вы используете все эти 'in'? В коде нет ничего общего. –