UNPKG

sai-language

Version:

An object-oriented language designed to afford code comprehension and maintenance. Transpiles in-place to Javascript.

266 lines (163 loc) 6.95 kB
# This file is automatically generated. _Do not edit._ Unknown Heading ### COUNTER - _pronount for integer-based loops_ - pronouns - ^counter A partner to **count**, **counter** is a _pronoun_, populated by the **count** iterator, if no other variable is specified in an **as** clause. .. counter Like all pronouns, **counter** is only visible in attached expressions or code blocks, not in any functions that may be called within those expressions. An example: count friends.length debug counter Similar to **it** in nested contexts, you are unable to access “outer” values of **counter** within inner contexts unless you assign them to a name other than **counter** using the **as** clause. count 3 count 3 debug counter // only the inner loop's 'counter' is visible here. // prints 0 1 2 0 1 2 0 1 2 count 3 as i count 3 debug i+','+counter // outer loop's 'counter' now available here as 'i' // prints 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2 count 3 count 3 as j debug counter+','+j // no, this doesn't work, you still can't access the outer 'counter' // 'counter' always has the value of the innermost context // prints 0,0 1,1 2,2 0,0 1,1 2,2 0,0 1,1 2,2 ### ERROR - _catch pronoun_ - pronouns - ^error summary .. error Valid only within the **catch** exception handler clause of a **try/catch/finally** construct. Receives the exception thrown. try noFunction catch debug error > [TypeError: undefined is not a function] You can override this behaviour by using an **as** clause with the **catch** statement: try noFunction catch as e debug e > [TypeError: undefined is not a function] ### IT - _context-sensitive pronoun_ - pronouns - ^it **It** is the most commonly used pronoun, populated by most iterators and comprehensions, as well as the **exists** conditional and **with** contextualizer. .. it _Pronouns_ have values when provided by the system during certain code events. The **it** variable is only available in attached expressions or code blocks -- not in any functions that may be called within those expressions, and not in code outside those blocks. A partial list of **it** enabled events: exists [expr] // it: expr with [expr] // it: expr iterate [iterable] // it: each iterated value each [collection] // it: each value in the collection ply [list] // it: each element in the array .. [collection] | thru // it: each value in the collection .. [collection] | audit .. [collection] | into .. [collection] | has .. [collection] | highest .. [collection] | lowest When nesting contexts that create a **it** context, you will be unable to access “outer” values of **it** within the inner contexts unless you assign them to a name other than **it** using the **as** clause. ply: 1,2,3 ply: 4,5,6 debug it // prints 4 5 6 4 5 6 4 5 6 ply: 1,2,3 ply: 4,5,6 as inner debug it // still prints 4 5 6 4 5 6 4 5 6 ply: 1,2,3 as outer ply: 4,5,6 debug outer // prints 1 1 1 2 2 2 3 3 3 When **it** is populated, you can also use the “unrooted” **attribute** ( . dot) scoping prefix. The following are all synonymous: set field to 'province' set quebeckers to friends has it.province='QC' set quebeckers to friends has it[field]='QC' set quebeckers to friends has .province='QC' (There is no unrooted [] lookup available, you can't `[field]`.) ### KEY - _looping pronoun_ - pronouns - ^key Often a partner to **it**, **key** is the second most commonly used _pronoun_, populated by most iterators and comprehensions. .. key Like all pronouns, **keys** is only visible in attached expressions or code blocks, not in any functions that may be called within those expressions. A partial list of **keys** enabled events: each [collection] // key: the trait name of each value in the collection ply [list] // key: the array index of each element in the array count [expr] // key: the number being counted iterate [generator] // key: the row number of the value being processed .. [collection] thru // key: each trait name/array index of the collection .. [collection] audit .. [collection] into .. [collection] has An example: ply friends debug key // prints: 0 1 2 3 4 5 6 7 each friends[0] debug key // prints: name age cat province Similar to **it** and **counter** in nested contexts, you are unable to access “outer” values of **key** within inner contexts unless you assign them to a specific variable using the **as** clause. See **counter** for an example of this issue. ### SELF - _pronoun for set statements_ - pronouns - ^self A pronoun used only in a **set** statement that contains the original value of the variable that is being set/modified. set [var] .. self .. The following lines are equivalent; one of them is easier to read than the other. set totalskey to totalskey ? 0 + amount set totalskey to self ? 0 + amount ### SUM - _reduction pronoun_ - pronouns - ^sum A pronoun active only within a **into** clause or code block. .. sum Represents the static value that accumulates changes during **into** iteration over a data set. debug friends | into 0 set sum + .age > 185 **Sum** is initialized with the value following **into**. debug friends | into blank set sum[.province] to (self default 0)+1 > { ON: 5, QC: 3 } ### TRIAL - _pronoun for conditionals and switch_ - pronouns - ^trial A pronoun set to the value tested in an **if/exists** or **switch** statement. if [expr] .. trial .. switch [expr] case [match] .. trial .. default .. trial .. In an **if/exists** statement, **trial** is only valid in the body of the first code block. exists readline() // trial is available here else // trial is undefined here In a **switch** statement, **trial** is available through all **case**s and the **default**. switch Keypress.toUpperCase() case 'N' Move 0,-1 case 'S' Move 0,1 default debug 'I don't know what ${trial} means.' ... You can grant a specific name to the tested value with the **as** clause: if Keypress as key switch key.toUpperCase() ... Note that **trial** receives the tested value; the final result of the **if** or **switch** expression, not the value of any component: if Keypress>0 debug trial // the debug statement can only ever print 'true' Using the parenthetical **as** is one solution to this problem: if ( Keypress as key) > 0 debug key // reports the actual value of key