↑ ABC Example: A Telephone List
This uses the table data-type. In use, 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
You can define your own commands:
HOW TO DISPLAY t:
FOR name IN keys t:
WRITE name0, t[name] /
>>> DISPLAY tel
Guido 4134
Jennifer 4054
Timo 4098
To find the user of a given number, you can use a quantifier:
>>> IF SOME name IN keys tel HAS tel[name] = 4054:
WRITE name
Jennifer
Or create the inverse table:
>>> PUT {} IN subscriber
>>> FOR name IN keys tel:
PUT name IN subscriber[tel[name]]
>>> WRITE subscriber[4054]
Jennifer
>>> WRITE subscriber
{[4054]: "Jennifer"; [4098]: "Timo"; [4134]: "Guido"}
Commands and functions are polymorphic:
>>> DISPLAY subscriber
4054 Jennifer
4098 Timo
4134 Guido
Functions may return any type. Note that indentation is significant - there are
no BEGIN-END's or { }'s:
HOW TO RETURN inverse t:
PUT {} IN inv
FOR k IN keys t:
PUT k IN inv[t[k]]
RETURN inv
>>> WRITE inverse tel
{[4054]: "Jennifer"; [4098]: "Timo"; [4134]: "Guido"}
>>> DISPLAY inverse inverse tel
Guido 4134
Jennifer 4054
Timo 4098