From 77c11a2443adb883621b4253d63fe40db048bd85 Mon Sep 17 00:00:00 2001
From: Bruce Hill <bitbucket@bruce-hill.com>
Date: Wed, 9 May 2018 20:35:47 -0700
Subject: [PATCH] Fixed up examples to be up to date and working.

---
 examples/how_do_i.nom | 72 +++++++++++++++++++++++--------------------
 1 file changed, 39 insertions(+), 33 deletions(-)

diff --git a/examples/how_do_i.nom b/examples/how_do_i.nom
index 579ea56..18c0a89 100644
--- a/examples/how_do_i.nom
+++ b/examples/how_do_i.nom
@@ -7,8 +7,11 @@
       in an
     indented area.
 
-# How do I import files?
-use "lib/core.nom"
+# How do I import a file?
+use "core/control_flow.nom"
+
+# How do I import all the files in a directory?
+use "core"
 
 # Set a variable?
 %x <- 1
@@ -19,7 +22,7 @@ use "lib/core.nom"
 # Modify a variable?
 %foobar <- 100
 # As a shorthand, you can type:
-<- %foobar + 1
+%foobar +<- 1
 # which does the same thing as:
 %foobar <- (%foobar + 1)
 
@@ -54,13 +57,10 @@ say "Hello world!"
 # Use a list?
 %my_list <- ["first item", "second item", "third item"]
 # Lists are 1-indexed because they're implemented as Lua tables, so this prints "first item"
-say (1st in %my_list)
-# These do the same thing:
-say (%my_list's 1)
-say (1 in %my_list)
+say %my_list.1
 # List entries can be modified like this:
-(1st in %my_list) <- "ONE!!!"
-say (size of %my_list)
+%my_list.1 <- "ONE!!!"
+say (length of %my_list)
 
 # Define a dictionary/hash map?
 %my_dict <- {x: 99, y: 101}
@@ -71,8 +71,8 @@ say (size of %my_list)
 
 # Use a dict?
 # Dicts are also implemented as Lua tables, so they're accessed and modified the same way as lists
-say (%my_dict's "x")
-(%my_dict's "x") <- 9999
+say %my_dict.x
+%my_dict.x <- 9999
 
 # Do conditional branching?
 if: 1 < 10
@@ -131,18 +131,18 @@ for %backwards from 3 to 1 by -1
 %x <- 1
 repeat while: %x <= 3
     say "repeat while loop #\%x"
-    <- %x + 1
+    %x +<- 1
 
 %x <- 1
 repeat until: %x > 3
     say "repeat until loop #\%x"
-    <- %x + 1
+    %x +<- 1
 
 # Infinite loop:
 %x <- 1
 repeat
     say "repeat loop #\%x"
-    <- %x + 1
+    %x +<- 1
     if: %x > 3
         stop repeating
 
@@ -151,7 +151,7 @@ do
     %x <- 1
     === %again ===
     say "GOTO loop #\%x"
-    <- %x + 1
+    %x +<- 1
     if: %x <= 3
         go to %again
     say "finished going to"
@@ -208,24 +208,28 @@ action [>> %foo_bar $$$^ --> % @& _~-^-~_~-^ %1 !]
 
 >> "wow" $$$^ --> "so flexible!" @& _~-^-~_~-^ "even numbers can be variables!" !
 
+# There's also full unicode support
+%こんにちは <- "こんにちは"
+action [% と言う]
+    "\(%)世界"
+say (%こんにちは と言う)
+
 # Math and logic operations are just treated the same as function calls in the syntax
 say (2 + 3)
-# So it's easy to define your own operators
+#.. So you can define your own operators, although they will need to be parenthesized to
+    play nicely with other operators
 action [%a ++ %b]
     2 * (%a + %b)
+say (1 ++ (2 * 3))
 
-#.. The following are characters won't "stick" to their neighbors, so the
-    compiler treats them as solitary single-character tokens: '~`!@$^&*-+=|<>?/
-    which means you can jam things together:
-assume ((5++2) is (   5   ++   2   )) or barf "ugh"
-
-
-# Do grouping?
+# How do I do grouping?
 # Expressions can be grouped by enclosing parentheses:
 say (2 + 3)
 # Or by an indented region
 say
     2 + 3
+# Or by ":" until the end of the line
+say: 2 + 3
 # If you need to keep going after an indented region, you can start the next line with ".."
 say both
     "Very long first argument that needs its own line"
@@ -244,7 +248,7 @@ say both
 # The "lua> %" and "=lua %" macros can be used to write raw lua code: 
 action [say the time]
     lua> ".."
-        nomsu:writeln("The OS time is: "..os.time());
+        io.write("The OS time is: "..os.time().."\n");
 say the time
 say "Math expression result is: \(=lua "(1 + 2*3 + 3*4)^2")"
 
@@ -253,6 +257,8 @@ action [square root of %n]
     =lua "math.sqrt(\%n)"
 say "The square root of 2 is \(square root of 2)"
 
+#.. The "immediately %" macro forces the indented code below it to run before the rest of
+    the file finishes compiling, so it's often useful for writing your own macros.
 immediately
     # Macros can be defined to transform one bit of nomsu code into another using "parse % as %":
     parse [if %condition is untrue %body] as
@@ -260,19 +266,19 @@ immediately
 
     # Or to transform nomsu code into custom lua code using "compile % to %"
     compile [if %condition on opposite day %body] to
-        %body_lua <- (%body as lua)
-        return {..}
-            locals: %body_lua's "locals"
-            statements: ".."
-                if not \(%condition as lua expr) then
-                    \((%body_lua's "statements") or "\(%body_lua's "expr");")
-                end
+        Lua ".."
+            if not \(%condition as lua expr) then
+                \(%body as lua statements)
+            end
+    
+    # Constants can be defined as macros (but they need to be parenthesized when invoked)
+    parse [TWENTY] as: 20
 
-if (1 > 10) is untrue
+if (1 > (TWENTY)) is untrue
     say "Nomsu parsing macros work!"
     say "It looks like a keyword, but there's no magic here!"
 
-if (1 > 10) on opposite day
+if (1 > (TWENTY)) on opposite day
     say "Lua compiling macros work!"
     say "It looks like a keyword, but there's no magic here!"