Opisane zjawisko stało się pretekstem do napisania całkowicie "nieużytkowego" (ale za to śmiesznego) programu w LOGO. I chociaż ten program jest typowym przykładem "sztuki dla sztuki" może służyć jako doskonały model zastosowania rekurencji, którą w tym przypadku posłużymy się do uzyskania kolejnych, zmniejszających się obrazów.
to obrazy
telewizor :krok
make "krok :krok * 2 / 3
obrazy
end
I to jest właśnie rekurencja. W programowaniu polega ona na korzystaniu podczas definiowania procedury z tejże definiowanej procedury. O tym, jak potężnym narzędziem jest rekurencja świadczy fakt, że króciutka procedura obrazy realizuje praktycznie w całości program "kamera-telewizor". Wystarczy nadać wartości początkowe zmiennej krok i kamera w ruch.
to kamera
fs cs
make "krok 24
obrazy
end
Na tym właściwie powinienem skończyć. Bo przecież każdy wie jak wygląda telewizor i sam może go sobie zaprojektować. Roztargnionym przypominam jednak co składa się na odbiornik TV.
to telewizor :krok
skrzynka :krok
ekran :krok
lewanoga :krok
prawanoga :krok
glosnik :krok
klawisze :krok
klapka :krok
suwaki :krok
end
Podczas rysowania poszczególnych elementów przyda nam się procedura ustawiająca żółwia w żądanym punkcie
to ustaw :x :y
pu home
rt 90 fd :x
lt 90 fd :y
pd
end
i rysująca prostokąt.
to prostokat :bok1 :bok2
repeat 2 [lt 90 fd: bok1 lt 90 fd :bok2]
end
Teraz możemy spokojnie przystąpić do projektowania elementów składowych odbiornika.
to glosnik :krok
ustaw :krok * 12 :krok * 6
lt 90
repeat 3 [lt 90 fd :krok * 4 rt 90 pu fd :krok / 2 pd rt 90 fd :krok * 4 lt 90 pu fd :k rok / 2 pd]
end
to suwak :krok
lt 90
fd :krok / 2
rt 90 fd :krok / 3
prostokat :krok / 2 :krok * 2 / 3
lt 90 fd :krok / 2 lt 90 fd :krok / 3 rt 90
fd :krok * 3 / 2
end
to klawisze :krok
ustaw :krok * 12 :krok * 1
repeat 5 [prostokat :krok / 2 :krok / 2
lt 90 fd :krok / 2 rt 90]
end
to klapka :krok
ustaw :krok * 12 0
prostokat :krok * 5 / 2 :krok
end
to suwaki :krok
ustaw :krok * 12 -:krok * 2 suwak :krok
ustaw :krok * 12 -:krok * 3 suwak :krok
ustaw :krok * 12 -:krok * 4 suwak :krok
ustaw :krok * 12 -:krok * 5 suwak :krok
end
to lewanoga :krok
ustaw -:krok * 7 -:krok * 7
prostokat :krok :krok
end
to prawanoga :krok
ustaw :krok * 11 -:krok * 7
prostokat :krok :krok
end
to skrzynka :krok
ustaw :krok * 13 :krok * 7
prostokat :krok * 23 :krok * 14
end
to ekran :krok
ustaw :krok * 9 :krok * 6
prostokat :krok * 18 :krok * 12
end
Dla tych, którzy po uruchomieniu programu mieliby ochotę poczekać aż skończy się on wykonywać, mam smutną wiadomość — ten program nigdy się nie skończy. Pracowity żółw będzie rysował wciąż mniejsze i mniejsze telewizory, nieświadom, że od pewnego momentu zacznie się uwijać w obrębie jednego punktu na ekranie.
Roman Poznański