привязка отрицательного знака к значению в ocaml - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь запустить интерпретатор, который я сделал в 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

1 Ответ

2 голосов
/ 17 апреля 2020

Вы можете сделать PushI ~-1. ~- однозначно является оператором отрицания int: https://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL (~ -)

Другими словами, он не имеет никакой неоднозначности, такой как -.

...