From: Simon Forman Date: Sat, 24 Sep 2022 21:29:03 +0000 (-0700) Subject: concat X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d99d9ee8aa7d7e856af7914df5cbba9af4a5f4fe;p=joypy%2FThun.git concat Ocaml's match is very powerful, respect, but if I want more precise error messages (that conform to the joytest suite) then the extra utility functions must be implemented and employed. After that it's definition loading and the main REPL loop and I think that's it, eh? --- diff --git a/implementations/Ocaml/helloworld/bin/main.ml b/implementations/Ocaml/helloworld/bin/main.ml index facb5f0..72bc948 100644 --- a/implementations/Ocaml/helloworld/bin/main.ml +++ b/implementations/Ocaml/helloworld/bin/main.ml @@ -9,11 +9,11 @@ type joy_list = joy_type list let joy_true = JoyTrue let joy_false = JoyFalse + +(* let j_loop = JoySymbol "loop" let zero = JoyInt 0 let dummy = JoyList [ joy_true; joy_false; j_loop; zero ] - -(* let joy_nil = JoyList [] ██████╗ ██╗ ██████╗████████╗██╗ ██████╗ ███╗ ██╗ █████╗ ██████╗ ██╗ ██╗ ██╔══██╗██║██╔════╝╚══██╔══╝██║██╔═══██╗████╗ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝ @@ -196,6 +196,11 @@ let clear s e d = (Joy_nil, e, d) *) +let concat s e d = + match s with + | JoyList tos :: JoyList second :: s0 -> (JoyList (second @ tos) :: s0, e, d) + | _ -> raise (ValueError "some damn thing.") + (* ██╗███╗ ██╗████████╗███████╗██████╗ ██████╗ ██████╗ ███████╗████████╗███████╗██████╗ ██║████╗ ██║╚══██╔══╝██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗ @@ -216,6 +221,7 @@ let joy_eval sym stack expression dictionary = let b, s1 = pop_int s0 in (JoyInt (b - a) :: s1, expression, dictionary) | "clear" -> ([], expression, dictionary) + | "concat" -> concat stack expression dictionary | _ -> let func = dictionary sym in (stack, func @ expression, dictionary) @@ -233,16 +239,15 @@ let rec joy : joy_list -> joy_list -> joy_dict -> joy_list * joy_dict = (* let expr = text_to_expression "1 2 + 3 4 + 5 6 + 7 8 + 9 10 + 11 + + + + + - " -*) let expr = text_to_expression "1 2 3 4 clear 5" +*) +let expr = text_to_expression "clear [23] [18] concat" let s = text_to_expression "23 [18 99] " let stack, _ = joy s expr d - -let () = - print_endline (expression_to_string stack); - (* print_endline - (expression_to_string - (text_to_expression "1 2 3[4 5 6[7 8]9 10]11[][][[]]")); - print_endline (expression_to_string (text_to_expression "true [ false]true")); - *) - print_endline (joy_to_string dummy) +let () = print_endline (expression_to_string stack) +(* print_endline + (expression_to_string + (text_to_expression "1 2 3[4 5 6[7 8]9 10]11[][][[]]")); + print_endline (expression_to_string (text_to_expression "true [ false]true")); + print_endline (joy_to_string dummy) +*)