# Aldor

For the Middle-earth character, see Aldor (Middle-earth).
Paradigm(s) multi-paradigm: object-oriented, functional, imperative, dependent typed, logic programming Richard Dimick Jenks, Barry Trager, Stephen Watt, James Davenport, Robert Sutor, Scott Morrison IBM Thomas J. Watson Research Center Axiom computer algebra system A♯, Pascal, Haskell Axiom computer algebra system Apache License .al, .as

Aldor is a programming language. It is the successor of A# as the extension language of the Axiom computer algebra system.

The Aldor language combines imperative, functional, and object-oriented features. It has an elaborate type system[citation needed], allowing types to be used as first-class values. Aldor's syntax is heavily influenced by Pascal, but it is optionally indentation-sensitive, like Python. In its current implementation, it is compiled, but an interactive listener is provided.

Aldor is Free software, available under the Apache License.

## Examples

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 << "." << newline;
}

main();