!!!!!!! Kamera, Telewizor i... Rekurencja czytelnia Try2emu

Kamera, Telewizor i... Rekurencja

Jeśli kamerę, do której podłączony jest telewizor skierujemy na ekran tegoż telewizora, uzyskamy ciekawy efekt. Na ekranie pojawi się telewizor, na którego ekranie pojawi się telewizor, na którego ekranie... itd.

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