compiler and vm: added subtraction

This commit is contained in:
2026-05-17 20:45:49 +03:00
parent 3668265b6f
commit 60d607cb59
2 changed files with 16 additions and 5 deletions
+14 -4
View File
@@ -23,20 +23,30 @@ let numeric_add = function
| NDouble x -> (function
| NInt y -> NDouble (x+.(float_of_int y))
| NDouble y -> NDouble (x+.y))
let numeric_sub = function
| NInt x -> (function
| NInt y -> NInt (x - y)
| NDouble y -> NDouble ((float_of_int x) -. y))
| NDouble x -> (function
| NInt y -> NDouble (x-.(float_of_int y))
| NDouble y -> NDouble (x-.y))
let builtin_print (v : Types.value ref list) =
List.iter (fun r -> print_endline (print_value !r)) v;
Types.Nil
let builtin_add (vs : Types.value ref list) =
of_numeric (List.fold_left numeric_add (NInt 0) (List.map (fun r -> to_numeric !r) vs))
let builtin_sub (vs : Types.value ref list) =
match vs with
| f :: rest -> of_numeric (List.fold_left numeric_sub (to_numeric !f) (List.map (fun r -> to_numeric !r) rest))
| [] -> failwith "invalid number of arguments for subtraction"
let table = [|
builtin_print;
builtin_add
builtin_add;
builtin_sub
|]