% Functional Recursion: ; fact IS RECUR [ 0 =, 1 first, pass, product, -1 +] % from wikipedia;

% Product of a range: ; fact IS * count;

% Plain recursion: ; fact IS OPERATION x {

if x = 0 then 1 else x * fact (x - 1) endif
};

% While loop: ; fact IS OPERATION x { prod := 1;

WHILE x > 0 DO
    prod := prod * x;
    x := x - 1;
ENDWHILE;
prod

}

% A basic divide by zero error: ;
1 / 0

# OUTPUT: ?div

% Errors are also values called faults, giving you their location: ;
5 / 5 10 0 8

# OUTPUT:

  1. 0.5 ?div 0.625

    % You can also define custom faults using 'fault': ;
    fault 'this is an error'

# OUTPUT: this is an error