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
Program uruchomisz bez trudu w bezpłatnym
|
|