Существует проблема с сопоставлением с шаблоном вашей функции parse_int
.
match int_of_string s with
| String.get n 0 = '-' -> Some -String.sub n 1 len
| n -> Some n
| exception _ -> None
Первое предложение здесь недопустимо, поскольку "String.get n 0 = '-'"
не является целочисленным конструктором. Вы можете написать 1
, который соответствует только целому числу 1
или _
, который соответствует любому целому числу или n
, который соответствует любому целому числу и связывает его с именем n
для остальной части предложения. Вы можете взглянуть на руководство для получения дополнительной информации.
Если вы хотите проверить, является ли первый символ строки -
сопоставление с образцом, не является подходящим инструментом для этого , просто используйте if then else
.
Однако обратите внимание, что int_of_string
прекрасно работает с отрицательными целыми числами, поэтому нет необходимости выполнять эту часть самостоятельно.
Не связано, но я заметил, что вы вызываете parse_int
в функции parse_command
. В этом случае вы должны определить parse_int
до parse_command
.