Scratch і двійкове дерево пошуку
З різних міркувань вирішив прослухати курс CS50 на «Прометеусі» (саме українською).
Перший тиждень там Scratch. Завдання без оцінки, просто щоб погралися, хоча деякі формальні вимоги є (не менше двох спрайтів і трьох скриптів чи щось таке — насправді дуже легкі обмеження).
Ну я й вирішив таки побавитися. Озброївся CLRS і зробив побудову та центрований обхід двійкового дерева пошуку з випадкової перестановки чисел 1–10:
Враження від Scratch дивні. З одного боку, мова має можливість створити процес (новий екземпляр спрайта), в тому числі клонувати себе (~fork). Можна послати/прийняти повідомлення, але лише широкомовні. Через це довелося ще завести глобальну змінну з номером спрайта-числа, якому призначене повідомлення. Можна писати керовані подіями програми, прив’язавши до спрайта купу скриптів «по події». Можлива рекурсія.
З іншого — нема «функцій» в сенсі повернення значення (і, якщо я правильно зрозумів обговорення на форумі, навіть не заплановано, в Scratch 3.0 beta їх нема).
Нема локальних змінних у «блоках користувача» («процедурах»). Блоки-процедури можуть працювати або з глобальними змінними (видимі взагалі всім спрайтам), або зі змінними спрайта (задаються для даного виду спрайтів і персональні для кожного екземпляра спрайта даного виду).
Є спискомасиви&nbssp;— названі списками, але більше схожі на динамічний масив, до якого можна звертатися по індексу і додано операції «вставити у позицію» (посунувши пізніші елементи далі), «перевірити, чи є такий елемент». Але нема пошуку, який би повернув індекс. Власне, ніхто не вміє повертати значення, про це вже казав. У цих списках неможливо зберігати об’єкти (екземпляри спрайтів). Просто нема ніякого поняття ідентифікатора об’єкта, тому й повідомлення лише широкомовні.
Структури для дерева створив з паралельних масивів полів (Left/Right/Parent). Через перераховані недоліки вийшло кривенько, але більше на те не маю часу.
Проект Binary search tree лежить на сайті Scratch.