Aldor is a programming language. It is the successor of A# as the extension language of the Axiom computer algebra system.
Aldor combines imperative, functional, and object-oriented features. It has an elaborate type system, allowing types to be used as first-class values. Aldor's syntax is heavily influenced by Pascal, but it is optionally indentation-sensitive, using whitespace characters and the off-side rule, like Python. In its current implementation, it is compiled, but an interactive listener is provided.
Aldor is distributed as free and open-source software, under the Apache License 2.0.
The Hello world program looks like this:
#include "aldor"
#include "aldorio"
stdout < "Hello, world!" < newline;
Example of dependent types (from the User Guide):
#include "aldor"
#include "aldorio"
#pile
sumlist(R: ArithmeticType, l: List R): R ==
s: R := 0;
for x in l repeat s := s + x
s
import from List Integer, Integer, List SingleFloat, SingleFloat
stdout < sumlist(Integer, [2,3,4,5]) < newline
stdout < sumlist(SingleFloat, [2.0, 2.1, 2.2, 2.4]) < newline
99 Bottles of Beer:
#include "aldor"
#include "aldorio"
import from Integer, String;
bob(n: Integer): String == {
b: String := " bottle";
if n ~= 1 then b := b + "s";
b + " of beer";
}
main(): () == {
n: Integer := 99;
otw: String := " on the wall";
refrain
while n > 0 repeat {
stdout < n < bob(n) < otw < ", " < n < bob(n) < "." < newline;
stdout < "Take one down and pass it around, ";
n := n - 1;
if n > 0 then stdout < n;
else stdout < "no more";
stdout < bob(n) < otw < "." < newline;
stdout < newline;
}
last verse
stdout < "No more" < bob(n) < otw < ", no more" < bob(n) < "." < newline;
stdout < "Go to the store and buy some more, ";
n: Integer := 99;
stdout < n < bob(n) < otw < ".