Перейти до вмісту

Karel (programming language)
Karel — це вступна навчальна мова програмування, призначена для початківців. Її створив Річард Е. Петтіс і представив у книзі Karel the Robot: A Gentle Introduction to the Art of Programming. Цю мову Петтіс використовував у своїх курсах програмування в Стенфордському університеті в Каліфорнії. Мова названа на честь чеського письменника Карела Чапека, який увів слово робот у своїй п’єсі R.U.R.

Принципи:
Програма мовою Karel керує простим роботом на ім’я Карел, який діє в середовищі, що складається з сітки вулиць (горизонтально) та проспектів (вертикально). Карел розуміє п’ять базових команд:

move — переміщує Карела на одну клітинку вперед у напрямку, куди він повернений;
turnLeft — повертає Карела на 90 градусів ліворуч;
putBeeper — розміщує маркер (beeper) на поточній клітинці;
pickBeeper — забирає маркер (beeper) з поточної клітинки;
turnoff — вимикає Карела та завершує виконання програми.

Окрім цих команд, Карел може перевіряти умови у своєму безпосередньому оточенні, зокрема чи є маркер на поточній клітинці, чи знаходяться поруч стіни, а також у якому напрямку він повернений. Програміст може створювати нові команди, поєднуючи базові інструкції, використовувати умовні керуючі конструкції (if, while), що ґрунтуються на перевірках середовища, та застосовувати ітераційні конструкції для реалізації складнішої поведінки робота.

Приклад
Нижче наведено простий приклад синтаксису Karel:
BEGINNING-OF-PROGRAM
 
 DEFINE turnRight AS
 BEGIN
   turnLeft;
   turnLeft;
   turnLeft;
 END
 
 BEGINNING-OF-EXECUTION
   ITERATE 3 TIMES
   BEGIN
     turnRight;
     move
   END
   turnoff
 END-OF-EXECUTION
 
END-OF-PROGRAM
Специфікація
Наведена реалізація Karel використовується в мові програмування Python. Існують також інші реалізації.

Примітивні функції
Основні примітивні функції:
move() - Карел переміщується на одну клітинку в напрямку, куди він повернений.
turn_left() - Карел повертається ліворуч на 90 градусів.
put_beeper() - Карел розміщує маркер (beeper) на поточній клітинці.
pick_beeper() - Карел підбирає маркер (beeper) з поточної клітинки.
paint_corner(COLOR_NAME) - Карел зафарбовує поточну клітинку в заданий колір. Доступна скінченна множина кольорів.

Структура програм
Програми мовою Karel мають таку структуру:
Коментарі: будь-який рядок, що починається з символу #, є коментарем і ігнорується інтерпретатором.

Функції: оголошуються за допомогою ключового слова def після якого вказується ім’я функції та круглі дужки. Тіло функції записується в наступних рядках.

main(): під час виконання програми запускається функція main. Інші функції виконуються лише в разі їх виклику.

Умови в Karel
Карел може реагувати на умови у своєму середовищі:
front_is_clear(), beepers_present(), beepers_in_bag(), left_is_clear(), right_is_clear(), facing_north(), facing_south(), facing_east(), facing_west()

Та їхні заперечення:
front_is_blocked(), no_beepers_present(), no_beepers_in_bag(), left_is_blocked(), right_is_blocked(), not_facing_north(), not_facing_south(), not_facing_east(), not_facing_west()

Також можливе визначення кольору поточної клітинки за допомогою функції corner_color_is(COLOR_NAME).

Умови та цикли
Доступні дві керуючі конструкції:
умовне виконання з використанням if та else;
цикли з використанням for і while.