Я пытаюсь запустить интерпретатор, который я сделал в ocaml, а когда i to pu sh в отрицательном значении, т.е. пусть e1 = run [PushI -2; PushI 2; Меньше, чем] []. Я получаю сообщение об ошибке, потому что он говорит, что я передаю функции PushI два аргумента, я предполагаю, что они говорят о знаке - и двух. Потому что делать (-2) работает. Что я могу изменить, чтобы сделать PushI -2 жизнеспособным входом.
код:
type stackVal =
I of int
type command = PushI of int
let rec run (commands : command list) (stack: stackVal list) : stackVal list =
match (commands , stack) with
| (PushI i :: rest, _ ) -> run rest (I i :: stack)
let to_string (s : stackVal) : string =
match s with
| I i -> string_of_int i
let parse_command (s:string) : command =
match take_while is_alpha (String.trim s) with
| ("PushI" , p) -> let Some i = parse_int (String.trim p) in PushI i
let parse_int (s : string) : int option =
match int_of_string s with
| n -> Some n
| exception _ -> None