Integraalipäiväjutun ohjelmointihaaste
Integraalipäiväjutussa [1] Markku Leino kysyi: ”Osaatko (ja pystytkö) rakentamaan ohjelmakoodin, joka tekee itsesimilaarin puun? Mikä ohjelmointikieli olisi kätevä?” Vastatakseni haasteeseen poimin esiin binääripuita koskevan osan yli kolmekymmentä vuotta sitten MAOLin Kiinan matkaa varten valmistelemastani esitelmätekstistä [2]. Matkan sujumisesta olen kertonut aikaisemmin Dimensio-lehdessä [3].
Yksinkertaisin esimerkki fraktalisoituvasta, itsesimilaarisesta puurakenteesta on binääripuu. Sen kasvattaa vaihe vaiheelta rekursiivinen prosessi, joka lisää runkoon kaksi oksaa kerrallaan (kuva 1):
to tree :branch :angle if :branch < 1 [stop] forward :branch left :angle tree 0.62 * :branch :angle right 2 * :angle tree 0.62 * :branch :angle left :angle back :branch end

Ohjelmassa on kaksi parametria: ensimmäisen haaran (eli rungon) pituus ja haarautumiskulma. Ohjelma on kirjoitettu niin, että ne annetaan ohjelmakutsussa. Itse ohjelmakoodissa on kolmas parametri, joka määrää oksan pituuden edelliseen verrattuna: 0.62. Sekin voisi tietysti olla myös ohjelmakutsussa. Näitä vaihtelemalla saadaan jo monenlaisia puita (kuva 2).

Esimerkkinä soveltamisesta käytin esitelmässäni sukupuuta (kuva 3).

Puusta saa luonnollisemman ja vaihtelevamman, kun lisätään useampi haara ja niihin paksuutta tai satunnaisuutta (kuva 4). Samalla ohjelmakoodikin pitenee tietysti:
to 3tree :branch :angle if :branch < 3 [stop] line :branch round :branch / 6 left :angle 3tree 0.6 * :branch :angle right :angle 3tree 0.5 * :branch :angle right :angle 3tree 0.6 * :branch :angle left :angle back :branch end
to line :length :thickness if 0 = remainder :thickness 2 [make ”thickness :thickness +1] fd :length line1 1 end
to line1 :times if not :times < :thickness [lt 90 fd (:thickness – 1) / 2 rt 90 stop] lt 90 fd :times lt 90 fd :length line1 :times + 1 end

Muuttamalla haarautumiskulmaa saadaan puut myös taipumaan (kuva 5)

Tämä juttu ei yritäkään vastata Markun jälkimmäiseen kysymykseen kätevästä ohjelmointikielestä. Olkoon vain esimerkkinä siitä, miten binääripuita tuotettiin neljättä kymmentä vuotta sitten kilpikonnagrafiikalla. Minulle oli yllätys, että aikoinaan Commodore-Logolla kirjoittamani koodi toimi edelleen sellaisenaan FMS-Logossa.
Lähteet
[1] Palojärvi, Neea ym.: Ensimmäiset Integraalipäivät 16.–18.4.2021. Dimensio 26.8.2021 osoitteessa https://dimensiolehti.fi/ensimmaiset-integraalipaivat-16-18-4-2021/
[2] Korhonen, Hannu (1989): Fractal demonstrations in Logo language by the help of 乌龟, wu gui, the turtle. Paper to be presented at Chinese–Finnish-symposium on mathematics and science instruction, Fudan University, Shanghai, June 8th 1989. Julkaisematon.
[3] Korhonen, Hannu (2018): Pakoon junalla luentomatkalta. Dimensio 1/2018, s. 41.