diff --git a/examples/guessing_game.plthy b/examples/guessing_game.plthy index 68853e6..8868e8e 100644 --- a/examples/guessing_game.plthy +++ b/examples/guessing_game.plthy @@ -2,7 +2,7 @@ hello| set do random<1;128;> -> r| set 0 -> guess| do [ - set do input<'guess: ';> -> guess| + set do int;> -> guess| do do print<'too high';> if variable guess > variable r| do do print<'too low';> if variable guess < variable r| do do print<'correct!';> if variable guess = variable r| diff --git a/examples/pol_not_calc.plthy b/examples/pol_not_calc.plthy index 919f85a..7570292 100644 --- a/examples/pol_not_calc.plthy +++ b/examples/pol_not_calc.plthy @@ -16,17 +16,48 @@ define split<1> as [ return variable list| ]| -define calc<1> as [ +define is_number<1> as [ + set '0123456789' -> numbers| + set 0 -> i| + do [ + set 0 -> j| + do [ + do skip else return false if argument #1{variable i} = variable numbers{variable j}| + set variable j + 1 -> j| + ] until variable j = do len| + set variable i + 1 -> i| + ] until variable i = do len| + return true| +]| + +define calc<3> as [ + do return argument #2 + argument #3 if argument #1 = '+'| + return 'error'| +]| + +define unfold<1> as [ + do return 'error' if do len = 0| + set {} -> middle| set 1 -> i| do [ set variable middle + {argument #1{variable i};} -> middle| set variable i + 1 -> i| ] until variable i = do len - 1| - return variable middle| + + do return 'error' if do len = 0| + + do [ + set variable middle{0} -> middle| + do set do int -> n1 else return 'error' if do "is_number"| + ] else set do "unfold" -> n1 if do len = 1| + + do set do int-1};> -> n2 else return 'error' if do "is_number"-1};>| + + return do "calc"| ]| set do input<':';> -> x| set do "split" -> list| -do print;>| +do print;>| goodbye| \ No newline at end of file diff --git a/plthy_impl/ast_nodes.py b/plthy_impl/ast_nodes.py index 4087961..dd56b6a 100644 --- a/plthy_impl/ast_nodes.py +++ b/plthy_impl/ast_nodes.py @@ -189,7 +189,7 @@ class Builtin(Command): if isinstance(result, str) or isinstance(result, int) or isinstance(result, float): prints.append(str(result)) elif isinstance(result, list): - result = f"{'{'}{''.join([str(i)+";" for i in result])}{'}'}" + result = f"{'{'}{''.join([str(i)+';' for i in result])}{'}'}" prints.append(str(result)) else: print(f"C003: Incorrect type {type(result)} for builtin print")