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