are syntactic sugar for conventionally named method calls: a + b stands for a.plus(b). The usual arithmetic precedence conventions are used to resolve the calling order of methods in complex formulae. Example of iterators This program prints numbers from 1 to 10. class MAIN is main is loop i := 1.upto!(10); #OUT + i + "\n"; end; end; end; The loop ... end construct is the preferred means of defining loops, although while and repeat-until are also available. Within the construct, one or more iterators may be used. Iterator names always end with an exclamation mark. (This convention is enforced by the compiler.) upto! is a method of the INT class accepting one once argument, meaning its value won't change as the iterator yields. upto! could be implemented in the INT class with code similar to the following one. upto!(once m:INT):SAME is i: INT := self; -- initialise i to the value of self, -- that is the integer of which this method is called loop if i>m then quit; -- leave the loop when i goes beyond m end; yield i; -- else use i as return value and stay in the loop i := i + 1; -- and increment end; end; Type information for variables is denoted by the postfix syntax variable:CLASS. The type can often be inferred and thus the typing information is optional, as in anInteger::=1. SAME is a pseudo-class referring to the current class. References External links Sather homepage Class-based programming languages GNU Project software