Każdy z tysiąca żółwi rysuje jedną nitkę w pomponie. Żółwie są opisane przez klasę "model", która definiuje
funkcję obsługi sygnału "krok": obrót i krok w przód z losowo zmienianymi parametrami. Program tworzy 1000
żółwi, ale liczbę tą można zwiększać w miarę możliwości komputera.
Warto zwrócić uwagę na następujące elementy programu:
-
sygnał "krok" wysyła żółw, który został utworzony specjalnie do tego celu - ten żółw nie należy do klasy
"model" i sam nic nie rysuje; pętla
forever
, którą wykonuje,
mogłaby być wykonana także przez głównego żółwia, ale zablokowałoby to wykonanie instrukcji z linii
poleceń;
-
przycisk "Stop"/"Go!" zmienia wartość zmiennej współdzielonej
:go
(widocznej dla wszystkich żółwi) i pozwala wstrzymać rysowanie; gdy
:go = true
żółw :u
w pętli wysyła sygnał "krok" z maksymalną prędkością,
gdy :go = false
żółw
:u
w każdej iteracji pętli czeka 10 milisekund by nie
obciążać procesora wykonywaniem pustej pętli;
-
sygnał "krok" jest sygnałem blokującym, tzn. program żółwia wysyłającego sygnał jest wstrzymywany
do czasu zakończenia wszystkich funkcji obsługi uruchomionych przez ten sygnał - zapewnie to wykonanie tej
samej liczby kroków przez wszystkie żółwie;
-
żółwie są tworzone jednocześnie przy pomocy "asynchronicznego" konstruktora:
(anewt $model :h :c)
;
zmiana tej instrukcji na:
(newt $model :h :c)
(instrukcja bez początkowej literki "a") spowoduje, że żółwie będą tworzone kolejno, co wyraźnie spowolni
uruchomienie programu przy dużej liczbie żółwi :n
.