Add Routines
authorJason Self <j@jxself.org>
Sun, 2 Jun 2019 15:41:06 +0000 (08:41 -0700)
committerJason Self <j@jxself.org>
Sun, 2 Jun 2019 15:41:06 +0000 (08:41 -0700)
informqr/informqr.md

index eea256baa78e9c8df3aab8b3c611da1b1405a515..e12df8ef2e569a5f453f424ed9918e42b9078151 100644 (file)
@@ -302,4 +302,61 @@ A common statement is the assignment:
 There are two forms of multiple assignment:
 
     variable = variable = ... = expr ;
-    variable = expr, variable = expr, ... ;
\ No newline at end of file
+    variable = expr, variable = expr, ... ;
+
+Routines
+--------
+
+A routine can have up to 15 local variables: word values which are
+private to the routine and which by default are set to zero on each
+call. Recursion is permitted.
+
+A **standalone** routine:
+
+-   has a name, by which it is called using `routine();` can also be
+    called indirectly using
+
+    indirect(routine,a1,a2, ... a7)
+
+-   can take arguments, using `routine(a1,a2, ... a7)`, whose values
+    initialise the equivalent local variables
+
+-   returns true at the final "]"
+
+        [ routine
+            local_var local_var ... local_var ;
+            statement;
+            statement;
+            ...
+            statement;
+            ]
+
+A routine **embedded** as the value of an object property:
+
+-   has no name, and is called when the property is invoked; can also
+    be called explicitly using object.property()
+
+-   accepts arguments only when called explicitly
+
+-   returns false at the final "]"
+
+        property [
+            local_var local_var ... local_var;
+            statement;
+            statement;
+            ...
+            statement;
+            ]
+
+Routines return a single value, when execution reaches the final "\]"
+or an explicit return statement:
+
+    return expr;
+    return;
+    rtrue;
+    rfalse;
+
+To define a dummy standalone routine with N local variables (unless it
+already exists):
+
+    Stub routine N;
\ No newline at end of file