From 6a429d79558f70578ba30565f5ae299f0fe42da1 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 7 Oct 2017 16:38:13 -0700 Subject: [PATCH] Added "unless" to core. --- examples/how_do_i.nom | 8 ++++---- lib/control_flow.nom | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/examples/how_do_i.nom b/examples/how_do_i.nom index 6e6219a..4d667cf 100644 --- a/examples/how_do_i.nom +++ b/examples/how_do_i.nom @@ -250,20 +250,20 @@ rule [square root of %n] =: say "The square root of 2 is \(square root of 2)" # Macros can be defined to transform one bit of nomsu code into another using "parse % as %": -parse [unless %condition %body] as: +parse [if %condition is untrue %body] as: if (not %condition): %body # Or to transform nomsu code into custom lua code using "compile % to code %" -compile [unless2 %condition %body] to code: ".." +compile [if %condition on opposite day %body] to code: ".." |if not (\(%condition as lua)) then | \(%body as lua statements) |end -unless (1 > 10): +if (1 > 10) is untrue: say "Nomsu parsing macros work!" say "It looks like a keyword, but there's no magic here!" -unless2 (1 > 10): +if (1 > 10) on opposite day: say "Lua compiling macros work!" say "It looks like a keyword, but there's no magic here!" diff --git a/lib/control_flow.nom b/lib/control_flow.nom index c4d6900..6287bfb 100644 --- a/lib/control_flow.nom +++ b/lib/control_flow.nom @@ -7,8 +7,12 @@ compile [if %condition %if_body] to code: ".." |if \(%condition as lua) then; | \(%if_body as lua statements) |end; +compile [unless %condition %body] to code: ".." + |if not (\(%condition as lua)) then; + | \(%body as lua statements) + |end; -compile [if %condition %if_body else %else_body] to code: ".." +compile [if %condition %if_body else %else_body, unless %condition %else_body else %if_body] to code: ".." |if \(%condition as lua) then; | \(%if_body as lua statements) |else;