Мова програмування Logo, діалект мови Lisp, була розроблена як інструмент для навчання. З цієї мети випливають її особливості — інтерактивність, модульність, розширюваність, гнучкість типів даних.
Інтерактивність
Хоча є декілька версій Logo, які компілюються, зазвичай вона реалізується як інтерпретована мова. Інтерактивність цього підходу надає користувачеві негайний зворотний зв’язок щодо окремих інструкцій, таким чином допомагаючи в процесі налагодження та навчання. Повідомлення про помилки є описовими. Наприклад
fowad
I don't know how to fowad (Я не знаю, як fowad)
(Слово fowad не є примітивом — одним із вбудованих слів Logo — і не процедурою, яку ви визначили.)
forward
Not enough inputs to forward (Недостатньо даних для того, щоб рухатися далі)
(Тепер, коли ви написали його правильно, Logo знає слово forward, але не може виконати вашу інструкцію, оскільки для forward потрібна додаткова інформація.
forward 100
(Logo щаслива. Повідомлення про помилку немає. Черепаха рухається вперед на 100 кроків.)
Модульність і розширюваність
Програми на Logo — це зазвичай набір невеликих процедур. Як правило, процедури визначаються шляхом написання їх у текстовому редакторі. Спеціальне слово to супроводжується назвою процедури. Наступні рядки формують визначення процедури. Слово end означає, що ви закінчили.
У нашому прикладі графіки черепахи ми визначили процедуру малювання квадрата
to square (до квадрата)
repeat 4 [forward 50 right 90] (повторити 4 [вперед 50 вправо 90])
end (кінець)
і використали її як підпроцедуру іншої процедури
to flower (до квітки)
repeat 36 [right 10 square] (повторити 36 [вправо 10 квадрат])
end (кінець)
Подібним чином flower може бути будівельним блоком чогось більшого
to garden (до саду)
repeat 25 [set-random-position flower] (повторити 25 [вкажіть-довільне-розташування квітки])
end (кінець)
Ні, set-random-position не є примітивом, але random є, а також setpositio (або setpos або setxy). Або ви можете написати set-random-position, використовуючи forward і right разом з random.
Як тільки процедура Logo визначена, вона працює як примітиви Logo. Насправді, коли ви дивитесь на програми Logo, неможливо дізнатися, які слова є примітивами, а які визначені користувачем, якщо ви не знаєте цього конкретного застосування Logo. У нашому прикладі мови ми використали процедуру pick для випадкового вибору елемента зі списку, наприклад, у процедурі who.
to who (до кого)
output pick [Sandy Dale Dana Chris] (вихідний вибір [Сенді Дейл Дана Кріс])
end (кінець)
У деяких версіях Logo вибір є примітивом, а в інших ви повинні писати його самостійно. Who буде виглядати й працювати однаково в обох випадках.
Logo дозволяє будувати складні проєкти невеликими кроками. Програмування в Logo виконується шляхом поповнення її словникового запасу, навчання її нових слів за допомогою слів, які вона уже знає. Таким чином, це схоже на те, як люди вивчають розмовну мову.
Гнучкість
Logo працює зі словами та списками. Слово у Logo – це рядок символів. Список у Logo — це впорядкований набір слів і/або списків. Числа – це слова, але вони особливі, тому що з ними можна виконувати такі дії, як арифметика.
Багато мов програмування досить суворі щодо бажання точно знати, які саме дані ви використовуєте. Це полегшує роботу комп’ютера, але ускладнює роботу програміста. Перед додаванням кількох чисел вам, можливо, доведеться вказати, чи є вони цілими, чи дійсними числами. Комп’ютер повинен знати такі речі. Але більшість людей про це не замислюються, тому Logo подбає про це за вас. Коли її просять зробити арифметику, Logo просто виконує це.
print 3 + 4 (надрукувати 3 + 4)
7
print 3 / 4 (надрукувати 3 / 4)
.75
Якщо ви не знайомі з Logo, але працюєте з іншими мовами програмування, наступна послідовність може вас здивувати:
print word "apple "sauce (надрукувати слово ‘’яблучний ‘’соус)
applesauce
print word "3 "4 (надрукувати слово "3 "4)
34
print 12 + word "3 "4 (надрукувати 12 + слово "3 "4)
46
Ось рекурсивна процедура, яка обчислює факторіали:
to factorial :number (до факторіала :число)
if :number = 1 [output 1] (якщо :число = 1 [вихід 1])
output :number * factorial :number - 1 (вихід : число * факторіал : число - 1)
end кінець
print factorial 3 (надрукувати факторіал 3)
6
print factorial 5 (надрукувати факторіал 5)
120
Ось процедура перевертання списку слів:
to reverse :stuff (перевернути : предмет)
ifelse equal? count :stuff 1 (ifelse дорівнює? полічити : предмет 1)
[output first :stuff] ([вихід перший :предмет])
[output sentence reverse butfirst :stuff first :stuff] ([вихід речення навпаки, але спочатку :предмет перший : предмет])
end (кінець)
print reverse [apples and pears] (надрукувати навпаки [яблука та груші])
pears and apples (груші та яблука)
Ви також можете поглянути на цікавий зразок Logo Брайана Харві.
Покращення
Щойно проілюстровані функції є спільними для всіх версій Logo. Деякі реалізації Logo містять розширені мовні функції.
Існувала об'єктноорієнтована Logo під назвою Object Logo для Macintosh.
MicroWorlds Logo включає багатозадачність, так що кілька незалежних процесів можуть виконуватися одночасно. Така ж можливість є в програмному забезпеченні Control Lab, продуктові LEGO Logo. Ще більш масштабна паралель Logo є StarLogo.
У традиційному Logo виконання команди черепасі
repeat 9999 [forward 1 right 1] (повторити 9999 [вперед 1 вправо 1])
займе деякий час. Інструкція
repeat 9999 [forward 1 right 1] print "HELLO (повторити 9999 [вперед 1 вправо 1] надрукувати "HELLO)
призведе до появи слова HELLO після того, як черепаха закінчить рух.
У MicroWorlds Logo введення
launch [repeat 9999 [forward 1 right 1]] print "HELLO (запустити [повторити 9999 [вперед 1 вправо 1]] надрукувати "HELLO)
запустить черепаху. Слово HELLO з’явиться, як тільки буде запущено перший процес. Або
forever [forward 1 right 1] print "HELLO (назавжди [вперед 1 вправо 1] надрукувати "HELLO)
зініціює процес, який триватиме доки ви його не зупините. Знову ж таки, слово HELLO з’явиться, щойно розпочнеться процес черепахи.
Дізнайся більше
Щоб дізнатися більше про мову програмування Logo, подивіться на тритомну монографію Брайана Харві "Стиль Logo в галузі комп’ютерних наук" і про "Вдосконалена Logo" Майкла Френдлі.
Якщо у вас немає Logo, але ви хочете розпочати її використовувати, ви можете переглянути нашу сторінку програмного забезпечення Logo. Або ви можете просто завантажити UCBLogo, MSWLogo, FMSLogo або StarLogo прямо зараз.
Source: http://el.media.mit.edu/logo-foundation/what_is_logo/logo_programming.html
COPYRIGHT ©2014 LOGO FOUNDATION. ALL RIGHTS RESERVED.
Was this article helpful?
45 readers found this helpful