Table of Contents

Statements and compounds

Structure

Statements normally end at a newline character, unless there is a backslash at the end of a line.

print 'Statement'

print \
  'Statement'

Semicolons can be used on one line to separate statements.

print 'Statement 1.'; print 'Statement 2.'

Compounds are blocks of statements that end with the end keyword.

if True
    print 'Compound inside "if"'
end

As a special case, single-statement compounds can be created with a colon :.

if True: print 'No "end" needed here'

The keyword pass can be used in place of an empty compound.

if True: print "'Tis true."; else: pass

Each compound must be closed with its own end keyword.

if True
    if True
        if True
            if True
            end
        end
    end
end

Assignment

The assign statement is used to create new variables in the local namespace.

i = 10

Variables are untyped, so any other kind of value can later be assigned to the same variable.

i = "abc"

Arrays are modifiable, so one can change the value of an individual element.

$ array = [1, 2, 3, 4]  
  
$ array[1] = 100

$ print array
[ 1, 100, 3, 4 ]

Nested arrays can also be assigned into.

$ array[2] = ['a', 'b', 'c']

$ array[2][1] = 'Bee'

$ print array
[ 1, 100, [ a, Bee, c ], 4 ]

One can assign to dictionaries to add or modify the values of keys.

$ d = {1:2, 'Three':4}

$ d[5] = 'Five'

$ print d
{ 1: 2, 5: Five, Three: 4 }

When assigning, the right-hand value is copied to the new variable.

array = [1, 2, 3]
origArray = array
array[1] = 10
# origArray remains unmodified

Weak assignment

Weak assignment ?= only creates new variables. It never modifies existing ones.

$ print "z exists?", 'z' in locals()
z exists? False

$ z ?= 3

$ print "z exists?", 'z' in locals()
z exists? True

$ print 'z =', z
z = 3

$ z ?= 10    # this one does nothing

$ print 'z =', z
z = 3

const

You can use the const keyword when assigning to create a read-only variable.

$ const z = 10

$ print 'z has been consted to', z
z has been consted to 10

Attempting to assign a new value to a const variable causes an exception.

try
    z = 10
    print 'Allowed to reassign the same value...'
    z = 5
catch ReadOnlyError
    print 'Have to delete z before its value can change.'
end

Output:

Allowed to reassign the same value...
Have to delete z before its value can change.

del

Variables and functions can be deleted with the del keyword.

del z

Flow control

if, elsif, else

if, elsif, and else are used for conditional branching.

if False
    print 'a)'
elsif False
    print 'b)'
elsif True > False
    print 'c)'
else
    print 'd)'
end

while

i = 5
while i > 0
    print 'Still looping because %i > 0' % i
    i -= 1
end

Output:

Still looping because 5 > 0
Still looping because 4 > 0
Still looping because 3 > 0
Still looping because 2 > 0
Still looping because 1 > 0

break

The break statement is used to break out of loops.

while True
    print "I won't stay here."
    break
    print "Jumped over this."
end

Optionally, a number argument can be given to break to break out of multiple nested loops. Below, the break escapes from two loops.

while True
    while True
        print "Uh-oh, now I'm in trouble!"
        break 2
    end
end
print "Whew"

for

for loops iterate over a sequence of array elements, dictionary key-value pairs, or string characters. The loop variable is not deleted afterwards, so it can be checked if the loop was terminated early with break.

for i in ['planes', 'trains', 'automobiles']
    print i
end
print 'Value of i after the "for" loop is', i

Output:

planes
trains
automobiles
Value of i after the "for" loop is automobiles

When iterating a dictionary, the loop variable is an array containing the key and the value.

a = {'a': 1, 'b': 2}
for i in a
    print i
end

Output:

[ a, 1 ]
[ b, 2 ]

continue

The continue statement interrupts the loop and returns flow back to the beginning, with the next element.

for i in ['planes', 'trains', 'automobiles']
    if i == 'trains': continue
    print i, 'are cool!'
end

Output:

planes are cool!
automobiles are cool!