From 11eee72a61c8ddf07a45227c7027cc59d1d7a375 Mon Sep 17 00:00:00 2001 From: Mark <> Date: Wed, 19 Jun 2024 13:58:30 +0200 Subject: [PATCH] fix examples --- examples/01_Hello_Name.mers | 2 +- examples/02_Calc_Sum.mers | 9 +++-- examples/03_Basic_Calculator.mers | 46 ++++++++++++++---------- examples/04_Greatest_Common_Divisor.mers | 2 +- examples/05_Matrix_Multiplicator.mers | 10 +++--- examples/06_TicTacToe.mers | 35 ++++++++++-------- 6 files changed, 59 insertions(+), 45 deletions(-) diff --git a/examples/01_Hello_Name.mers b/examples/01_Hello_Name.mers index 26c1420..ed6eebe 100644 --- a/examples/01_Hello_Name.mers +++ b/examples/01_Hello_Name.mers @@ -1,3 +1,3 @@ "What's you name?".println -name := ().read_line.trim +name := ().read_line.try((name) -> name.trim, () -> "") ("Hello, ", name, "!").concat.println diff --git a/examples/02_Calc_Sum.mers b/examples/02_Calc_Sum.mers index e3e51ff..7ef83fb 100644 --- a/examples/02_Calc_Sum.mers +++ b/examples/02_Calc_Sum.mers @@ -1,9 +1,12 @@ total := 0.0 loop { ("Total: ", total, ". Type a number to change.").concat.println - ().read_line.trim.parse_float.try( - (n) -> &total = (total, n).sum - // not a number, so return a 1-tuple to break from the loop + ().read_line.try( + (line) -> line.trim.parse_float.try( + (n) -> &total = (total, n).sum + () -> "Not a number".eprintln + ) + // CTRL+D, so return a 1-tuple to break from the loop () -> (()) ) } diff --git a/examples/03_Basic_Calculator.mers b/examples/03_Basic_Calculator.mers index acbb677..ad21731 100644 --- a/examples/03_Basic_Calculator.mers +++ b/examples/03_Basic_Calculator.mers @@ -1,29 +1,37 @@ "- Calculator -".println "Type = to set the value to that number.".println "Type +, -, * or / to change the value.".println -"Type exit to exit.".println +"Type exit or press CTRL+D to exit.".println current := 0.0 loop { ("[ ", current, " ]").concat.println - input := ().read_line.trim - num := (input, 1).substring.trim.parse_float.try( - (val) -> val - () -> 0.0 + ().read_line.try( + (line) -> { + input := line.trim + num := (input, 1).substring.trim.parse_float.try( + (val) -> val + () -> 0.0 + ) + mode := input.substring(0, 1) + if mode.eq("+") { + ¤t = (current, num).sum + } else if mode.eq("-") { + ¤t = (current, (num, -1).product).sum + } else if mode.eq("*") { + ¤t = (current, num).product + } else if mode.eq("/") { + ¤t = (current, num).div + } else if mode.eq("=") { + ¤t = num + } else if input.eq("exit") { + (()) + } else { + "Expected one of +-*/= followed by a number".eprintln + } + } + // CTRL+D + () -> (()) ) - mode := input.substring(0, 1) - if mode.eq("+") { - ¤t = (current, num).sum - } else if mode.eq("-") { - ¤t = (current, (num, -1).product).sum - } else if mode.eq("*") { - ¤t = (current, num).product - } else if mode.eq("/") { - ¤t = (current, num).div - } else if mode.eq("=") { - ¤t = num - } else if (input.eq("exit"), input.eq("")).any { - (()) - } } diff --git a/examples/04_Greatest_Common_Divisor.mers b/examples/04_Greatest_Common_Divisor.mers index eea0c8d..f83ffa8 100644 --- a/examples/04_Greatest_Common_Divisor.mers +++ b/examples/04_Greatest_Common_Divisor.mers @@ -12,7 +12,7 @@ gcd := vals -> { get_num := () -> { loop { - line := ().read_line.trim + line := ().read_line.try((line) -> line.trim, () -> "") line.parse_float.try( (n) -> (n) () -> ("Error: '", line, "' not a number!").concat.println diff --git a/examples/05_Matrix_Multiplicator.mers b/examples/05_Matrix_Multiplicator.mers index b1f8f1c..1c72029 100644 --- a/examples/05_Matrix_Multiplicator.mers +++ b/examples/05_Matrix_Multiplicator.mers @@ -2,8 +2,8 @@ parse_matrix_line := input -> { vals := input.str_split(" ") vals_len := vals.len // reverse vals - vals_rev := {() -> &vals.pop}.as_list - nums := vals_rev.filter_map(v -> v.parse_float).as_list + // vals_rev := {() -> &vals.pop}.as_list + nums := vals.filter_map(v -> v.parse_float).as_list if nums.len.eq(vals_len) if nums.len.signum.eq(1) (nums) @@ -12,7 +12,7 @@ parse_matrix_line := input -> { } read_matrix_line := width -> { - ().read_line.trim.parse_matrix_line.try( + ().read_line.try((line) -> line.trim, () -> "").parse_matrix_line.try( (line) -> { line := [List] line w := width.deref @@ -81,9 +81,7 @@ matrix_print := matrix -> { fget := v -> v.get.try( () -> { - "called fget but get returned ():".println - v.println - 5.panic + ("called fget but get returned (): ", v).concat.panic } (v) -> v ) diff --git a/examples/06_TicTacToe.mers b/examples/06_TicTacToe.mers index 18ae245..0b06433 100644 --- a/examples/06_TicTacToe.mers +++ b/examples/06_TicTacToe.mers @@ -60,22 +60,27 @@ loop { ().print_board loop { (if player c_blue else c_green, "> ", c_gray).concat.print - input := ().read_line.trim - input.parse_int.try( - (field) -> { - if (field.gt(0), field.ltoe(9)).all { - (l, m, r) := if field.gt(6) (&f1, &f2, &f3) else if field.gt(3) (&f4, &f5, &f6) else (&f7, &f8, &f9) - col := field.subtract(1).modulo(3) - f := if col.eq(0) l else if col.eq(1) m else r - if f.deref.eq(0) { - f = if player 1 else -1 - (()) - } else "field already occupied".println - } else { - "number must be 1 <= n <= 9".println - } + ().read_line.try( + (line) -> { + input := line.trim + input.parse_int.try( + (field) -> { + if (field.gt(0), field.ltoe(9)).all { + (l, m, r) := if field.gt(6) (&f1, &f2, &f3) else if field.gt(3) (&f4, &f5, &f6) else (&f7, &f8, &f9) + col := field.subtract(1).modulo(3) + f := if col.eq(0) l else if col.eq(1) m else r + if f.deref.eq(0) { + f = if player 1 else -1 + (()) + } else "field already occupied".println + } else { + "number must be 1 <= n <= 9".println + } + } + () -> "not a number!".println + ) } - () -> "not a number!".println + () -> (()) ) } &player = player.eq(false)