Malkontenci twierdzą, że Logo nie przydaje się w procesie dydaktycznym, bo jego oryginalne właściwości nie pozwalają na przeniesienie doświadczeń do innych języków programowania. Moim zdaniem to taka sama prawda, jak to, że umiejętność gry w szachy nie pomaga podczas jazdy na wrotkach. I co z tego? Właśnie przez swą odmienność Logo wyzwala z rutyny, pokazuje nowe horyzonty i uczy elastyczności w rozwiązywaniu problemów. Przecież i tak wykorzystujemy niewielki ułamek możliwości naszego umysłu, więc dodatkowa przygoda go nie zrujnuje, a na pewno wzbogaci.
w kilku słowach
Język programowania Logo wywodzi się od mechanicznych zabawek, których ruchy można było programować za pomocą ograniczonego zestawu nieskomplikowanych poleceń. Jeżdżącego po podłodze elektronicznego żółwia wyposażono w pisak, który mógł zostawiać na podłożu ślad przebytej drogi.
Popularyzacja komputerów osobistych pozwoliła na przeniesienie tresury robota-żółwia do wirtualnej rzeczywistości, redukując praktycznie do zera koszty takiego przedsięwzięcia. Ponadto składnia języka jest na tyle prosta, że już po kilku minutach nauki można pisać pierwsze programy.
Z drugiej strony, w tym języku nie widać ograniczeń do jakiegoś konkretnego obszaru zastosowań, można go więc użyć do realizacji praktycznie każdego zadania.
Przykładem może być klasyczna zagadka znana jako wieże Hanoi. Dysponując zestawem krążków różnej wielkości lub np. monet, ułożonych w stos zwężający się ku górze, należy przenieść je po jednej na drugi stos, korzystając z jednego pomocniczego stosu tak, aby nigdy większy krążek nie leżał na mniejszym.
Pokazany obok program napisałem w latach 80 w ciągu kilkunastu minut, korzystając ze świetnej implementacji Logo na komputerze Atari 800 XL, jako przyczynek do dyskusji o wyższości BASIC-a nad innymi językami programowania. Niedoszły autor analogicznego programu w BASIC-u skapitulował, gdy mając już ponad setkę wierszy był wciąż daleki od ukończenia pracy.
to hanoi :n
make "h 10 make "a [] make "b [] make "c [] make "dly 60
pu ht repeat :n [queue "a product repcount 20] display
mov count :a "a "b "c show "Done.
end
to display
cs next -1 dsptower :a next 1 dsptower :b next 1 dsptower :c next -1
wait :dly
end
to next :i
rt 90 fd product :i 300 lt 90
end
to dsptower :stk
if not emptyp :stk [dspelem last :stk fd :h dsptower bl :stk bk :h]
end
to dspelem :w
rt 90 pd
fd :w/2 lt 90 fd :h lt 90 fd :w lt 90 fd :h lt 90 fd :w/2
pu lt 90
end
to mov :n :x :p :y
if :n > 0 [mov :n-1 :x :y :p push :y pop :x display mov :n-1 :p :x :y]
end
to całkiem proste
Oto opis poszczególnych procedur, linijka po linijce: hanoi główny program, liczba krążków jako parametr
inicjuje wysokość krążka, 3 puste stosy, czas przerwy
układa krążki na pierwszym stosie, wyświetla stan
przenosi wszystkie krążki zgodnie z zasadami
display wyświetla bieżący stan układanki
rysuje kolejno 3 stosy i wraca na miejsce
odczekuje zadany czas dla podziwiania widoku
next przechodzi do rysowania innego stosu
przesuwa się w poziomie zależnie od parametru
dsptower rysuje wieżę określoną parametrem
rysuje ostatni element, o ile istnieje jakiś, po czym robi to samo o grubość wyżej dla pozostałych elementów
dspelem rysuje element o szerokości podanej parametrem
obrót żółwia, włączenie pisaka
nakreślenie prostokąta kolejnymi marszami i obrotami
wyłączenie pisaka i powrót do początkowej pozycji
mov procedura rozwiązująca zadanie
przenosi n krążków z miejsca x na y z pomocą miejsca p, wyświetlając stan po każdym ruchu
Program uruchomisz bez trudu w bezpłatnym FMSLogo. Pakiet zawiera okienkowe środowisko uruchomieniowe, a także szczegółowy opis składni i bogaty wybór przykładów.