Я работаю над преобразованием многострочных строк в список токенов, с которыми мне было бы проще работать.
В соответствии с конкретными потребностями c моего проекта, я дополняю любой символ в каратах, который появляется в моем вводе, пробелами, так что "^"
превращается в " ^ "
. Для этого я использую что-то вроде следующей функции:
let bad_function string = Str.global_replace (Str.regexp "^") " ^ " (string)
Затем я использую что-то вроде функции ниже, чтобы затем превратить эту многострочную строку в список токенов (игнорируя пробел).
let string_to_tokens string = (Str.split (Str.regexp "[ \n\r\x0c\t]+") (string));;
По какой-то причине bad_function
добавляет караты в места, где их не должно быть. Возьмите следующую строку кода:
(bad_function " This is some
multiline input
with newline characters
and tabs. When I convert this string
into a list of tokens I get ^s showing up where
they shouldn't. ")
Первая строка строки превращается в:
^ This is some \n ^
Когда я передаю вывод из bad_function
в string_to_tokens
, я получаю следующий список:
string_to_tokens (bad_function " This is some
multiline input
with newline characters
and tabs. When I convert this string
into a list of tokens I get ^s showing up where
they shouldn't. ")
["^"; "This"; "is"; "some"; "^"; "multiline"; "input"; "^"; "with";
"newline"; "characters"; "^"; "and"; "tabs."; "When"; "I"; "convert";
"this"; "string"; "^"; "into"; "a"; "list"; "of"; "tokens"; "I"; "get";
"^s"; "showing"; "up"; "where"; "^"; "they"; "shouldn't."]
Почему это происходит и как я могу исправить, чтобы эти функции работали так, как я хочу?