ABC: Some Simple Examples

The (second) best way to appreciate the power of ABC is to see some examples (the first is to use it). In what follows, >>> is the prompt from ABC.

There are five types in the language: two basic -- Numbers and Texts -- and three structured -- Compounds, Lists, and Tables.

Numbers

Numbers are unbounded, and stored exact:
        >>> WRITE 2**1000
        107150860718626732094842504906000181056140481170553360744375038837
        035105112493612249319837881569585812759467291755314682518714528569
        231404359845775746985748039345677748242309854210746050623711418779
        541821530464749835819412673987675591655439460770629145711964776865
        42167660429831652624386837205668069376

        >>> PUT 1/(2**1000) IN x
        >>> WRITE 1 + 1/x
        107150860718626732094842504906000181056140481170553360744375038837
        035105112493612249319837881569585812759467291755314682518714528569
        231404359845775746985748039345677748242309854210746050623711418779
        541821530464749835819412673987675591655439460770629145711964776865
        42167660429831652624386837205668069377
Non-exact numbers use machine-precision:
        >>> WRITE root 2
        1.414213562373095

Texts

Texts (strings of characters) are also unbounded:
        >>> PUT ("ha " ^^ 3) ^ ("ho " ^^ 3) IN laugh
        >>> WRITE laugh
        ha ha ha ho ho ho 

        >>> WRITE #laugh
        18

        >>> PUT "Hello! "^^1000 IN greeting
        >>> WRITE #greeting
        7000

        >>> WRITE greeting|4
        Hell

        >>> WRITE greeting@4|3
        lo!

Lists

Lists are sorted lists of values of any one other type:
        >>> WRITE {1..10}
        {1; 2; 3; 4; 5; 6; 7; 8; 9; 10}
        >>> PUT {1..10} IN l
        >>> REMOVE 5 FROM l
        >>> INSERT 4 IN l
        >>> INSERT pi IN l
        >>> WRITE l
        {1; 2; 3; 3.141592653589793; 4; 4; 6; 7; 8; 9; 10}
You can have lists of any type, so here is a list of lists:
        >>> PUT {} IN ll
        >>> FOR i IN {1..3}:
                INSERT {1..i} IN ll
        >>> WRITE ll
        {{1}; {1; 2}; {1; 2; 3}}
        >>> FOR l IN ll:
                WRITE l /
        {1}
        {1; 2}
        {1; 2; 3}
        >>> WRITE #ll
        3

Compounds

Compounds are like records or structures, but without field names:
        >>> PUT ("Square root of 2", root 2) IN c
        >>> WRITE c
        ("Square root of 2", 1.414213562373095)
        >>> PUT c IN name, value
        >>> WRITE name
        Square root of 2
        >>> WRITE value
        1.414213562373095

Tables

Tables resemble arrays:
        >>> PUT {} IN tel
        >>> PUT 4054 IN tel["Jennifer"]
        >>> PUT 4098 IN tel["Timo"]
        >>> PUT 4134 IN tel["Guido"]

        >>> WRITE tel["Jennifer"]
        4054
You can write all ABC values out. Tables are kept sorted on the keys:
        >>> WRITE tel
        {["Guido"]: 4134; ["Jennifer"]: 4054; ["Timo"]: 4098}
The keys function returns a list:
        >>> WRITE keys tel
        {"Guido"; "Jennifer"; "Timo"}

        >>> FOR name IN keys tel:
               WRITE name, ":", tel[name] /
        Guido: 4134
        Jennifer: 4054
        Timo: 4098
Some complete example programs