# Довідка з програмування на &turtlescript;

Тут наведено довідник з мови &kturtle;, &turtlescript;. У першому розділі цієї глави ми поглянемо на деякі з аспектів граматики програм &turtlescript;. Другий розділ присвячено математичним операторам, булевим (логічним) операторам і операторам порівняння. Третій розділ є величезним списком всіх команд з почерговим їх обговоренням. У четвертому розділі наведено пояснення щодо надання значень змінним. Нарешті, ми пояснимо як впорядкувати виконання команд за допомогою інструкцій регулювання виконання у п’ятому розділі і як створювати власні команди за допомогою команди learn у розділі під номером шість.

## Граматика &turtlescript;

Як і у будь-якій мові, у &turtlescript; існують різні типи слів і символів. В українській ми відрізняємо дієслова (наприклад «йти» або «співати») та іменники (наприклад «сестра» або «будинок»). Ці слова використовують з різною метою. &turtlescript; — це мова програмування, за її посередництвом ви можете повідомити &kturtle; про потрібні вам дії.

У цьому розділі ми коротко зупинимося на деяких з різних типів слів та символів &turtlescript;. Ми надамо пояснення щодо коментарів, команд та трьох інших типів буквених виразів: чисел, рядків і булевих (так/ні) значень.

### Коментарі

Програма складається з інструкцій, які виконуються після запуску команди, і так званих коментарів. Коментарі не виконуються, &kturtle; просто ігнорує їх під час виконання програми. Коментарі призначено для програмістів: вони допомагають їм краще розуміти програму. Все, що буде вказано після символу `#` у &turtlescript; вважається коментарем. Ось приклад невеличкої програми, яка не виконує жодних дій:

    # ця невеличка програма нічого не робить, вона складається лише з коментаря!

Програма, хоч і зовсім непотрібна, але добре пояснює суть коментарів.

Коментарі є дуже корисними, якщо програма стає трохи складнішою. Коментарі є «порадником» для інших програмістів. У наведеній нижче програмі коментарі використано разом з командою print.

    # Цю програму було створено Cies Breijs.
    print "цей текст буде написано на полотні"
    # попередній рядок не є коментарем, а наступний — коментар:
    # print "цей текст не буде написано!"

У першому рядку наведено опис програми. Другий рядок буде виконано &kturtle;: черепашка намалює напис `цей текст буде написано на полотні` на полотні. Третій рядок є коментарем. У четвертому рядку наведено коментар з фрагментом коду &turtlescript;, якщо вилучити символ `#` з четвертого рядка, &kturtle; виконає інструкцію з друку. Програмісти кажуть: інструкцію «print» у четвертому рядку було «закоментовано».

Закоментовані рядки підсвічуються світло-сірим кольором у редакторі коду.

### Команди

За допомогою команди ви можете повідомити черепашці або &kturtle; про те, що слід виконати певну дію. Для деяких команд потрібні вхідні дані, деякі команди самі виводять дані.

    # для команди forward потрібні вхідні дані, у нашому випадку ними є число 100:
    forward 100

Перший рядок програми є коментарем. У другому рядку міститься команда `forward` і число `100`. Число не є частиною команди, воно є «вхідними даними» команди.

Для роботи деяких команд, наприклад `go`, потрібно декілька вхідних значень. Ці декілька значень слід відокремлювати між собою символом `,` (комою).

Щоб прочитати детальний огляд всіх команд, які підтримує &kturtle;, перейдіть за цим посиланням. Вбудовані команди буде підсвічено темно-синім.

### Числа

Скоріше за все, ви вже знаєте дещо про числа. Спосіб, у який числа використовуються у &kturtle;, не дуже відрізняється від розмовної мови або математики.

Існують так звані натуральні числа: `0`, `1`, `2`, `3`, `4`, `5` тощо. Від’ємні числа: `-1`, `-2`, `-3` тощо. Крім того, існують десяткові дроби або числа з крапкою: `0.1`, `3.14`, `33.3333`, `-5.05`, `-1.0`. Символ `.` (крапка) є символом, що використовується для відокремлення дробової частини.

Числа можна використовувати у математичних операторах і операторах порівняння. Їх також можна зберігати у змінних. Числа буде підсвічено темно-червоним кольором.

### Рядки

Спочатку наведемо приклад:

    print "Привіт, я — рядок."

У цьому прикладі `print` — команда, а `"Привіт, я — рядок."` — рядок. Рядки починаються і закінчуються позначкою лапок, `"`, за цими позначками і розпізнає рядки програма &kturtle;.

Рядки можна зберігати у змінних, подібно до чисел. Але, на відміну від чисел, рядки не можна використовувати у математичних діях або діях з порівняння. Рядки буде підсвічено червоним кольором.

### Булеві (так/ні) значення

Існує лише два булевих значення: `true` (так) і `false` (ні). У цих значень є і інші назви: увімкнути і вимкнути, одиниця і нуль. Але у &turtlescript; ми завжди називатимемо їх `true` і `false`. Погляньте на цей фрагмент коду &turtlescript;:

    $a = true

Якщо ви зазирнете до вікна інспектора ви побачите, що значенням змінної `$a` є `true`, і що ця змінна належить до булевого типу.

Часто булеві значення є результатом обчислення оператора порівняння, наприклад, у такому фрагменті коду &turtlescript;:

    $answer = 10 > 3

Значенням змінної `$answer` буде `true`, оскільки `10` більше за `3`.

Булеві значення, `true` і `false`, буде підсвічено темно-червоним.

## Математичні, булеві оператори та оператори порівняння

Заголовок цього розділу наче натякає на щось складне, але все не так складно, як здається.

### Математичні оператори

Ось основні математичні символи: додавання (`+`), віднімання (`-`), множення (`*`), ділення (`/`) і піднесення до степеня (`^`).

Ось невеличкий приклад математичних операторів, якими ви можете скористатися у &turtlescript;:

    $add      = 1 + 1
    $subtract = 20 - 5
    $multiply = 15 * 2
    $divide   = 30 / 30
    $power    = 2 ^ 2

Результат виконання математичних операцій слід призначати різноманітним змінним. За допомогою інспектора ви зможете переглянути ці змінні.

Якщо вам потрібно виконати прості обчислення, ви можете зробити щось на зразок цього:

    print 2010-12

А тепер приклад з дужками:

    print ( ( 20 - 5 ) * 2 / 30 ) + 1

Спочатку буде обчислено вираз у дужках. У нашому випадку, буде обчислено 20-5, потім це значення буде помножено на 2, поділено на 30, і додано до нього 1 (у результаті отримаємо 2). Дужками можна скористатися і у інших випадках.

У &kturtle; передбачено і додаткові математичні можливості у формі команд. Нижче наведено список команд, але без означення способу, у який вони працюють: round, random, sqrt, pi, sin, cos, tan, arcsin, arccos, arctan.

### Булеві (так/ні) оператори

Тоді як математичні оператори в основному призначено для чисел, булеві оператори призначено для булевих значень (`true` і `false`). Передбачено лише три булеві оператори, а саме: `and`, `or` і `not`. У наведеному нижче фрагменті &turtlescript; показано використання всіх цих операторів:

    $and_1_1 = true and true    # -> true
    $and_1_0 = true and false   # -> false
    $and_0_1 = false and true   # -> false
    $and_0_0 = false and false  # -> false

    $or_1_1 = true or true    # -> true
    $or_1_0 = true or false   # -> true
    $or_0_1 = false or true   # -> true
    $or_0_0 = false or false  # -> false

    $not_1 = not true   # -> false
    $not_0 = not false  # -> true

За допомогою інспектора ви зможете переглянути значення, крім того, ми навели результати виконання дій у коментарях. Результат застосування `and` дорівнює `true`, лише якщо з обох боків від нього стоять значення `true`. Результатом застосування `or` буде `true`, якщо з одного з боків від оператора стоїть `true`. Оператор `not` перетворює `true` на `false`, а `false` на `true`.

Булеві оператори буде підсвічено рожевим.

#### Декілька додаткових прикладів

Розглянемо наведений нижче приклад з `and`:

    $a = 1
    $b = 5
    if (($a < 10) and ($b == 5)) and ($a < $b) {
      print "привіт"
    }

У цьому фрагменті &turtlescript; результат застосування трьох операторів порівняння буде об’єднано за допомогою операторів `and`. Це означає, що для того, щоб черепашка написала «привіт», потрібно, щоб всі дії з порівняння давали результат «true».

Приклад з `or`:

    $n = 1
    if ($n < 10) or ($n == 2) {
      print "привіт"
    }

У цьому фрагменті коду &turtlescript; частина, розташована ліворуч від `or`, дає «true», а частина, розташована праворуч, — «false». Оскільки одна з двох частин виразу у операторі `or` дорівнює «true», результатом обчислення `or` буде «true». Це означає, що черепашка напише «привіт».

І нарешті, приклад з `not`, у якому ми змінними «так» на «ні», а «ні» — на «так». Дивіться:

    $n = 1
    if not ($n == 3) {
      print "привіт"
    } else {
      print "не привіт ;-)"
    }

### Оператори порівняння

Розглянемо таке елементарне порівняння:

    $answer = 10 > 3

Тут ми порівнюємо `10` з `3` за допомогою оператора «більше, ніж». Результатом цього порівняння буде булеве значення `true`, яке буде збережено у змінній `$answer`.

Всі числа і змінні (які містять числа) можна порівнювати за допомогою операторів порівняння.

Ось список можливих операторів порівняння:

#### Типи питань

`$A == $B` | дорівнює | відповіддю буде true, як `$A` рівне `$B`
`$A != $B` | не дорівнює | відповіддю буде true, якщо `$A` не дорівнює `$B`
`$A > $B` | більше, ніж | відповіддю буде true, якщо `$A` більше, ніж `$B`
`$A < $B` | менше, ніж | відповіддю буде true, якщо `$A` менше, ніж `$B`
`$A >= $B` | більше або дорівнює | відповіддю буде true, якщо `$A` більше або дорівнює `$B`
`$A <= $B` | менше або дорівнює | відповіддю буде true, якщо `$A` менше або дорівнює `$B`

Будь ласка, зауважте, що $A і $B мають бути числами або змінними, які містять числа.

## Команди

За допомогою команд ви наказуєте черепашці або програмі &kturtle; виконати якусь дію. Деяким з команд потрібні вхідні дані, деякі — самі виводять дані. У цьому розділі буде пояснено всі вбудовані команди, які можна використовувати у &kturtle;. Крім того, ви можете скористатися командою learn, щоб створити власні команди. Вбудовані команди, які ми тут обговорюємо, підсвічуються темно-синім кольором.

### Пересування черепашки

Існує декілька команд для пересування черепашки екраном.

forward (fw)

      forward X

  `forward` наказує черепашці просунутися вперед на X пікселів. Якщо перо опущено, черепашка залишатиме по собі слід у вигляді лінії. Команду `forward` можна скоротити до `fw`

backward (bw)

      backward X

  Команда `backward` наказує черепашці просунутися назад на X пікселів. Якщо перо опущено, черепашка залишатиме по собі слід у вигляді лінії. Команду `backward` можна скоротити до `bw`

turnleft (tl)

      turnleft X

  Команда `turnleft` наказує черепашці повернутися на X градусів ліворуч. Команду `turnleft` можна скоротити до `tl`.

turnright (tr)

      turnright X

  Команда `turnright` наказує черепашці повернутися на X градусів праворуч. Команду `turnright` можна скоротити до `tr`.

direction (dir)

      direction X

  Команда `direction` спрямовує черепашку у напрямку X градусів, відрахованих від нульового напрямку, безвідносно від попереднього напрямку, куди її було спрямовано. Команду `direction` можна скоротити до `dir`.

getdirection

      getdirection

  Команда `getdirection` повертає напрямок черепашки у форматі градусів, відрахованих від нульового напрямку, де нулеві відповідає напрямок вгору.

center

      center

  Команда `center` пересуває черепашку у центр полотна.

go

      go X,Y

  Команда `go` наказує черепашці перейти до вказаного місця на полотні. Це місце знаходиться у X пікселях від лівого краю полотна, і у Y пікселях від верхнього краю полотна.

gox

      gox X

  Команда `gox` наказує черепашці перейти до точки, розміщеної за X пікселів від лівого краю полотна, залишаючись на тій самій висоті.

goy

      goy Y

  Команда `goy` наказує черепашці перейти до точки, розміщеної за Y пікселів від верхнього краю полотна, залишаючись на тій же відстані від його лівого краю.

Під час виконання команд `go`, `gox`, `goy` і `center` черепашка не малюватиме лінії, незалежно від того чи піднято, чи опущено перо.

### Де знаходиться черепашка?

Існує дві команди, які повертають позицію черепашки на екрані.

getx

  `getx` повертає кількість пікселів від лівого краю полотна до поточної позиції черепашки.

gety

  `gety` повертає кількість пікселів від верхнього краю полотна до поточної позиції черепашки.

### У черепашки є перо

У черепашки є перо, яке малює лінію під час руху черепашки. Існує декілька команд, які керують цим пером. У цьому розділі пояснено зміст цих команд.

penup (pu)

      penup

  Команда `penup` піднімає перо над полотном. Якщо перо піднято під час руху черепашки лінії не малюватиметься. Прочитайте також інформацію щодо команди `pendown`. Команду `penup` можна скоротити до `pu`.

pendown (pd)

      pendown

  Команда `pendown` опускає перо на полотно. Якщо перо опущено на полотно, під час рухів, черепашка лишатиме по собі слід. Прочитайте також інформацію щодо команди `penup`. Команду `pendown` можна скоротити до `pd`.

penwidth (pw)

      penwidth X

  Команда `penwidth` встановлює товщину лінії, яку лишає перо, у значення X пікселів. Команду `penwidth` можна скоротити до `pw`.

pencolor (pc)

      pencolor R,G,B

  Команда `pencolor` встановлює колір лінії, яку лишає по собі перо. Команда `pencolor` отримує дані для кольору у вигляді RGB-комбінації. Команду `pencolor` можна скоротити до `pc`.

### Команди керування полотном

Існує декілька команд, які надають можливість керувати полотном.

canvassize (cs)

      canvassize X,Y

  За допомогою команди `canvassize` ви можете встановити розмір полотна. Ця команда отримує вхідні значення X і Y, де X — нова ширина полотна у пікселях, а Y — нова висота полотна у пікселях. Команду `canvassize` можна скоротити до `cs`.

canvascolor (cc)

      canvascolor R,G,B

  Команда `canvascolor` встановлює колір тла полотна. Команда `canvascolor` отримує вхідні дані у вигляді RGB-комбінації. Команду `canvascolor` можна скоротити до `cc`.

### Команди для очищення

Існує дві команди для очищення полотна, у разі якщо ви зробили помилку.

clear (ccl)

      clear

  За допомогою команди `clear` ви можете витерти всі малюнки з полотна. При цьому всі інші параметри, позиція і напрямок черепашки, колір тла полотна, видимість черепашки і розмір полотна, залишаться незмінними:

reset

      reset

  Команда `reset` очищує все набагато ґрунтовніше за команду `clear`. Після виконання команди `reset` все виглядатиме так, неначе ви тільки-но запустили &kturtle;. Черепашку буде розташовано по центру екрана, колір тла стане білим, черепашка малюватиме чорну лінію на полотні, а саме полотно матиме розмір 400 на 400 пікселів.

### Черепашка — це спрайт

Спочатку, коротеньке пояснення того, що таке спрайти: спрайти — це маленькі зображення, які можна пересувати екраном, які ми часто бачимо у комп’ютерних іграх. Наша черепашка — також спрайт. Докладнішу інформацію ви зможете отримати з розділу глосарія, присвяченого спрайтам.

Далі, ви зможете ознайомитися з повним списком всіх команд для роботи зі спрайтами.

[Поточна версія &kturtle; ще не підтримує використання спрайтів, які відмінні від черепашки. У майбутніх версіях ви зможете змінити черепашку на щось інше, що вам сподобається]

spriteshow (ss)

      spriteshow

  Команда `spriteshow` робить черепашку знову видимою після того, як її було сховано. Команду `spriteshow` можна скоротити до `ss`.

spritehide (sh)

      spritehide

  Команда `spritehide` ховає черепашку. Цією командою можна скористатися, якщо черепашка не вписується у ваш малюнок. Команду `spritehide` можна скоротити до `sh`.

### Чи може черепашка писати?

Відповідь: так. Черепашка може писати: вона напише для вас все, що ви їй накажете написати.

print

      print X

  Команда `print` використовується для того, щоб наказати черепашці написати щось на полотні. Команда `print` отримує числа і рядки як вхідні дані. Ви можете `писати` комбінації з чисел і рядків за допомогою символу +. Ось подивіться на цей приклад:

      $year = 2003
      $author = "Cies"
      print $author + " почав роботу над проектом KTurtle у " + $year + "році, і все ще отримує задоволення від роботи над ним!"

fontsize

      fontsize X

  Команда `fontsize` встановлює розмір шрифту, який використовуватиме команда `print`. Команда `fontsize` отримує одне вхідне значення, ним має бути число. Розмір встановлюється у пікселях.

### Математичні команди

Наведені нижче команди є додатковими математичними командами &kturtle;.

round

      round(x)

  округлює задане число до найближчого цілого.

      print round(10.8)
      forward 20
      print round(10.3)

  Виконуючи цей код, черепашка напише числа 11 і 10.

random (rnd)

      random X,Y

  Команда `random` отримує вхідні дані і виводить вихідні. Як вхідні дані їй потрібні два числа, перше (X) вказує на мінімальне значення числа, яке можна вивести, а друге (Y) — встановлює максимальне значення цього числа. У результаті дії команди буде виведено випадково вибране число, яке буде більше або рівне за мінімальне значення і менше або рівне за максимальне значення. Ось невеликий приклад:

      repeat 500 {
        $x = random 1,20
        forward $x
        turnleft 10 - $x
      }

  За допомогою команди `random` ви можете ввести елемент випадковості у вашу програму.

mod

      mod X,Y

  Команда `mod` повертає залишок від ділення першого числа на друге.

sqrt

      sqrt X

  Команду `sqrt` призначено для пошуку квадратного кореня з числа, X.

pi

      pi

  Ця команда повертає сталу Pi, `3.14159`.

sin
, cos
, tan

      sin X
      cos X
      tan X

  За допомогою цих команд задаються три відомі тригонометричні функції `sin`, `cos` і `tan` (tg). Вхідним параметром для всіх цих команд, X, є число.

arcsin
, arccos
, arctan

      arcsin X
      arccos X
      arctan X

  Ці команди є оберненими функціями sin, cos і tan. Вхідним параметром для всіх цих команд, X, є число.

### Введення і отримання інформації за допомогою діалогових вікон

Діалогове вікно — це невеличке контекстне вікно, у якому розміщено деяку інформацію від програми, або у яке слід ввести деяку інформацію, потрібну програмі. У &kturtle; є дві команди для виклику діалогових вікон, а саме: `message` і `ask`

message

      message X

  Команда `message` отримує як вхідні дані рядок. У результаті виконання команди буде показано контекстне вікно з текстом, який визначає вхідний рядок.

      message "Cies почав роботу над проектом KTurtle у 2003 році, і все ще отримує задоволення від роботи над ним!"

ask

      ask X

  Команда `ask` отримує вхідні дані у вигляді рядка. У результаті виконання команди буде показано діалогове вікно, у якому міститиметься текст з рядка, точно так само як і у команді message. Але, окрім цього, у вікні буде і поле для введенні інформації. У це поле введення користувач може ввести число або рядок, який можна зберегти у змінній або передано, як параметр, команді. Приклад:

      $in = ask "Скільки вам років?"
      $out = 2003 - $in
      print "У 2003 році вам було " + $out + " років."

  Якщо користувач закриває діалогове вікно введення або нічого не вводить у поле для введення, змінній надається порожнє значення.

## Присвоювання змінним значень

Спочатку ми розглянемо змінні, а потім поговоримо про те, як надати цим змінним значень.

Змінними є слова, що починаються на $, у редакторі ці слова підсвічуються пурпуровим кольором.

Змінні можуть містити будь-які числа, рядки або булеві значення. За допомогою оператора присвоювання, `=`, ви можете надати змінній її значення. Змінна зберігатиме свій вміст до завершення виконання програми або до зміни значення змінної на якесь інше.

Після надання значень ви можете використовувати змінні так, неначебто вони збігаються з власним вмістом. Ось приклад з фрагментом коду &turtlescript;:

    $x = 10
    $x = $x / 3
    print $x

Спочатку змінній `$x` надано значення `10`. Потім `$x` надано значення цієї ж змінної, поділеної на `3` — тобто `$x` надано значення частки `10 / 3`. Нарешті, `$x` буде намальовано черепашкою. Ви можете бачити, що у рядках два і три `$x` використано замість вмісту змінної.

Для того, щоб змінними можна було користуватися, цим змінним слід надати значення. Приклад:

    print $n

Результатом виконання буде повідомлення про помилку.

Будь ласка, погляньте на цей приклад &turtlescript;:

    $a = 2004
    $b = 25

    # наступна команда намалює рядок "2029"
    print $a + $b
    backward 30
    # а ця команда надрукує "2004 плюс 25 дорівнює 2029":
    print $a + " плюс " + $b + " дорівнює " + ($a + $b)

У перших двох рядках встановлено значення змінних `$a` і `$b` 2004 і 25. Далі йдуть дві команди `print` з командою `backward 30` між ними. Коментарі перед командами `print` пояснюють призначення цих команд. Команду `backward 30` додано для того, щоб забезпечити вивід кожної з порцій даних у окремому рядку. Як бачите змінними можна користуватися як замінниками їх вмісту, ви можете використовувати змінні з будь-якими операторами або передавати їх як вхідні дані під час викликукоманд.

Ще один приклад:

    $name = ask "Як вас звати?"
    print "Привіт, " + $name + "! Успіхів у вивченні мистецтва програмування..."

Досить зрозуміло. Знову ж таки, змінну `$name` використано як рядок.

Інспектор буде дуже корисним під час роботи зі змінними. Цей інструмент покаже вам значення всіх використаних у програмі змінних.

## Контроль над виконанням

Регулятори виконання надають вам змогу — як це і випливає з їх назви — керувати виконанням програми.

Команди керування виконанням підсвічуються темно-зеленим кольором і виокремлюються жирним шрифтом. З регуляторами виконання використовують і фігурні дужки, які підсвічуються чорним кольором і виокремлюються чорним шрифтом.

### Черепашко, зачекай!

Якщо ви вже повправлялися у програмуванні у &kturtle;, ви, мабуть зауважили, що черепашка малює дуже швидко. Ця команда примушує черепашку почекати деякий проміжок часу.

wait

      wait X

  Команда `wait` наказує черепашці чекати X секунд.

      repeat 36 {
        forward 5
        turnright 10
        wait 0.5
      }

  За допомогою цього коду малюється коло, але черепашка чекатиме по пів секунди перш ніж перейти до наступного кроку. Це створює враження черепашки, що рухається повільно.

### Умовне виконання

if

      if булеве значення { ... }

  Код між двома фігурними дужками буде виконано, лише `if` (якщо) результат обчислення булевого значення дорівнюватиме так.

      $x = 6
      if $x > 5 {
        print "$x більше за п’ять!"
      }

  У першому рядку змінній `$x` надається значення 6. У другому рядку використано оператор порівняння для знаходження значення `$x > 5`. Оскільки відповіддю на це питання є так регулятор виконання `if` дозволить виконання коду між фігурними дужками.

### Якщо «ні», це означає «інакше»

else

      if булеве значення { ... } else { ... }

  Команду `else` можна використовувати як додаток до регулятора виконання `if`. код між фігурними дужками після `else` виконуватиметься, лише якщо булеве значення дорівнюватиме ні.

      reset
      $x = 4
      if $x > 5 {
        print "$x більше за п’ять!"
      } else {
        print "$x менше за шість!"
      }

  Оператор порівняння обчислює значення `$x > 5`. Оскільки 4 не перевищує 5 значенням буде ні. Це означає, що буде виконано код між фігурними дужками після команди `else`.

### Цикл «while»

while

      while булеве значення { ... }

  Регулятор виконання `while` багато у чому схожий на `if`. Різниця між ними полягає у тому, що `while` продовжує виконання коду між фігурними дужками (цикл), аж доки булевий вираз не дорівнюватиме ні.

      $x = 1
      while $x < 5 {
        forward 10
        wait 1
        $x = $x + 1
      }

  У першому рядку змінній `$x` надано значення 1. У другому рядку виконано порівняння `$x < 5`. Оскільки відповіддю на це питання буде так регулятор виконання `while` починатиме виконання коду між фігурними дужками з початку, до того часу, коли значенням `$x < 5` не стане ні. У нашому випадку, код між фігурними дужками буде виконано чотири рази, оскільки кожного разу, коли виконується п’ятий рядок `$x` збільшується на 1.

### Цикл «repeat»

repeat

      repeat число { ... }

  Регулятор виконання `repeat` дуже схожий на `while`. Різниця полягає у тому, що `repeat` повторює виконання команд (цикл) задану кількість разів.

### Цикл з лічильником, «for»

for

      for змінна = число to число { ... }

  Цикл `for` — це цикл з лічильником, тобто він лічить повтори за вас. Перше число вказує значення змінної під час першого виконання циклу. Під час кожного виконання це число збільшується, аж доки не досягне другого числа.

      for $x = 1 to 10 {
        print $x * 7
        forward 15
      }

  Кожне виконання коду між фігурними дужками збільшує значення `$x` на 1, до того часу, коли `$x` досягне значення 10. Код між фігурними дужками пише на полотні значення `$x` помноженого на 7. Після виконання програми ви побачите на полотні таблицю множення на 7.

  Типовим розміром кроку циклу є 1, але ви можете використовувати інше значення за допомогою команди на зразок

      for змінна = число to число step число { ... }

### Полишити цикл

break

      break

  Негайно припиняє виконання програми у рамках циклу і передає керування команді, яку розташовано одразу за поточним циклом.

### Перервати виконання вашої програми

exit

      exit

  Завершує виконання вашої програми.

## Створення власних команд за допомогою learn

`learn` є дуже особливою командою, оскільки цю команду використовують для створення нових команд. Команда, яку ви створюєте за її допомогою може отримувати вхідні дані і повертати вихідні дані. Давайте поглянемо як створюється нова команда:

    learn circle $x {
      repeat 36 {
        forward $x
        turnleft 10
      }
    }

Нова команда називається `circle`. Команда `circle` отримує одне вхідне значення, параметр, який задає розмір кола. `circle` не повертає ніяких вихідних даних. Тепер у решті коду можна використовувати команду `circle` як звичайну команду. Ось приклад:

    learn circle $X {
      repeat 36 {
        forward $X
        turnleft 10
      }
    }

    go 200,200
    circle 20

    go 300,200
    circle 40

У наступному прикладі буде створено команду, яка повертає значення.

    learn faculty $x {
      $r = 1
      for $i = 1 to $x {
        $r = $r * $i
      }
      return $r
    }

    print faculty 5

У цьому прикладі створено нову команду з назвою `faculty`. Якщо вхідними даними цієї команди буде число `5`, буде повернуто `5*4*3*2*1`. З допомогою команди `return` можна вказати вихідне значення і повернути його програмі.

Команди можуть приймати і по декілька вхідних значень. У наступному прикладі буде створено команду, яка малює прямокутник.

    learn box $x, $y {
      forward $y
      turnright 90
      forward $x
      turnright 90
      forward $y
      turnright 90
      forward $x
      turnright 90
    }

Тепер ви можете виконати команду `box 50, 100`, і черепашка намалює на полотні прямокутник.