diff options
Diffstat (limited to 'src/lem_interp/interp_lib.lem')
| -rw-r--r-- | src/lem_interp/interp_lib.lem | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem index 4873149e..4cda3316 100644 --- a/src/lem_interp/interp_lib.lem +++ b/src/lem_interp/interp_lib.lem @@ -2,12 +2,20 @@ open import Interp open import Interp_ast import Maybe_extra open import Num +open import List let add (V_tuple [V_lit(L_num x); V_lit(L_num y)]) = V_lit(L_num (x+y)) ;; +let rec vec_concat (V_tuple args) = match args with + | [V_vector 0 true l; V_vector 0 true l'] -> V_vector 0 true (l ++ l') + | [V_lit l; x] -> vec_concat (V_tuple [litV_to_vec l; x]) + | [x; V_lit l] -> vec_concat (V_tuple [x; litV_to_vec l]) + end;; + let function_map = [ ("add", add); ("add_infix", add); + (":", vec_concat); ] ;; let eval_external name v = (Maybe_extra.fromJust (List.lookup name function_map)) v ;; |
