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

Це довідкова інформація щодо мови &kturtle;, &turtlelang;. У цьому розділі спочатку буде коротенько обговорено всі типи інструкцій. Потім буде одна за одною пояснено значення команд. Далі, ви зможете ознайомитися з контейнерами, математичними символами, питаннями і регуляторами виконання. Наприкінці буде показано як створювати власні команди за допомогою команди learn.

## Типи інструкцій

Як і у будь-якій мові програмування, у &turtlelang; існують різні типи слів і символів. Тут коротко пояснено різницю між цими типами.

### Команди

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

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

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

### Числа

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

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

Числа можна використовувати у математичних розрахунках і питаннях. Їх також можна покласти у контейнери.

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

### Рядки

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

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

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

Рядки можна вкладати у контейнери. Їх не можна використовувати у математичних обчисленнях і питаннях.

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

### Назви

За допомогою мови програмування &turtlelang; ви можете створювати нові об’єкти. Під час написання програми вам часто будуть потрібні контейнери, а у деяких випадках вам може знадобитися навчити черепашку нової команди. Коли ви створюватимете нову команду за допомогою команди learn, вам слід буде вказати назву нової команди.

Ви можете обрати будь-яку назву, але не ту, яка вже має для черепашки якесь значення. Наприклад, вам не можна називати функцію forward, оскільки цю назву вже використано для внутрішньої команди.

    # у цьому прикладі назву forward використано для
    # нової команди, але команда з такою назвою вже
    # існує, отже виконання програми призведе до помилки:
    learn forward {
      print "це не правильно"
    }

    # а така частина програми працюватиме:
    learn myforward {
      print "а так можна"
    }

У назвам мають міститися лише літери, числа і знаки підкреслення (_). Крім того, вони мають починатися з літери. Назви контейнерів повинні починатися з префікса контейнера ($).

    # у цьому прикладі назву forward використано як контейнер,
    # що починається з префікса $ prefix, отже, така назва
    # не буде конфліктувати з командою forward
    $forward = 20
    print $forward

Контейнери підсвічуються у редакторі коду у вигляді жирного тексту пурпурового кольору.

Щоб отримати докладніше пояснення і більше прикладів, будь ласка, прочитайте документацію, що стосується контейнерів і команди learn.

### Присвоювання

Присвоювання значення відбувається за допомогою символу `=`. У мовах програмування краще читати одинарний символ `=` не як «дорівнює», а як «приймає значення». Слово «дорівнює» краще пасує до символів `==`, які відповідають за питання.

Присвоювання, загалом кажучи, використовують для двох цілей: (1) вкласти вміст у контейнер, і (2) змінити вміст контейнера. Наприклад:

    $x = 10
    # контейнер x тепер містить число 10
    $W = "Мені "
    # тепер у контейнері W міститься рядок "Мені "
    # наступна команда надрукує вміст контейнерів «W» і «x» на полотні
    print $W + $x

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

### Математичні символи

&kturtle; підтримує всі базові математичні символи: додавання (`+`), віднімання (`-`), множення (`*`), ділення (`/`) і дужки `(` та `)`.

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

### Питання

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

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

### Слова-клей питань

Питання можна об’єднувати за допомогою так званих «слів-клею». Слова-клей — це `and`, `or` і особливе слово-клей — `not`.

Особливості використання слів-клею пояснено у розділі щодо слів-клею.

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

Коментарі — це рядки, які починаються з символу `#`. Приклад:

    # це коментар!
    print "а це вже не коментар"
    # попередній рядок не є коментарем, але наступний — також коментар:
    # print "а це вже не коментар"

Коментарі можна додавати до коду для власної зручності, або щоб їх могли прочитати інші люди. Коментарі використовують для: (1) додавання невеликих описів програми, (2) пояснення способу у який працює шматок коду, якщо цей спосіб не є очевидним, і (3) для «коментування» рядків коду, які слід (тимчасово) ігнорувати (погляньте на останній рядок попереднього прикладу).

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

## Команди

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

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

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

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`.

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` отримує одне вхідне значення, ним має бути число. Розмір встановлюється у пікселях.

### Команди, які створюють для вас випадкові числа

Існує одна команда, яка створює для вас випадкові числа, її назва — `random`, вона дуже корисна для отримання деяких результатів, які не можна заздалегідь передбачити.

random (rnd)

      random X,Y

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

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

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

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

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

message

      message X

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

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

ask

      ask X

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

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

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

## Контейнери

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

У контейнерах, які ще не використовувалися, нічого не міститься. Приклад:

    print $N

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

### Змінні: числові контейнери

Почнімо з прикладу:

    $x = 3
    print $x

У першому рядку літера `x` стає змінною (числовим контейнером). Як ви можете бачити, значення змінної `x` рівне 3. У другому рядку прикладу це значення буде намальовано на полотні.

Зауважте, що якщо потрібно намалювати просто x, слід написати

    print "x"

Це було просто, тепер трохи складніший приклад:

    $A = 2004
    $B = 25
    $C = $A + $B

    # наступна команда намалює рядок "2029"
    print $C
    backward 30
    # а ця команда надрукує "2004 plus 25":
    print $A + " plus " + $B
    backward 30
    # команда, яка друкує "1979":
    print $A - $B

У перших двох рядках встановлено значення змінних `A` і `B` 2004 і 25. У третьому рядку змінній `C` надано значення `A + B`, тобто число рівне 2029. Решта прикладу складається з 3 команд `print` з командою `backward 30` між ними. Команду `backward 30` додано для того, щоб вивід кожної з команд знаходився у новому рядку. У цьому прикладі ви також можете побачити, що змінні можна використовувати у математичних обчисленнях.

### Контейнери, що містять текст (рядки)

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

    print "Привіт, програмісте!"

Звичайний текст взято у лапки. Ці шматочки звичайного тексту ми будемо називати рядками.

Рядки можна зберігати у контейнерах, так само, як і числа Рядки дуже схожі на змінні. Найбільшою відмінністю між ними є те, що у них міститься текст, а не числа. З цієї причини рядки не можна використовувати у математичних обчисленнях і питаннях. Приклад використання рядків:

    $x = "Привіт, "
    $name = ask "Будь ласка, введіть ваше ім’я..."
    print $x + $name + ", як справи?"

У першому рядку `x` надається значення Привіт, . У другому рядку `name` надається значення отримане в результаті дії команди `ask`. У третьому рядку програма малює сполучення трьох рядків на полотні.

Ця програма запитає вас про ваше ім’я. Якщо ви, наприклад, введете ім’я Павло, програма напише Привіт, Павло, як справи?. Будь ласка, зауважте, що символ плюса (+) — це єдиний математичний символ, який ви можете використовувати для дій з рядками.

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

Так, &kturtle; може виконувати математичні дії. Ви можете додавати (+), віднімати (-), множити (*) і ділити (/). Ось приклад, де можна побачити принципи використання всіх цих дій:

    $a = 20 - 5
    $b = 15 * 2
    $c = 30 / 30
    $d = 1 + 1
    print "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d

Вам зрозуміло, які значення надано змінним a, b, c і d? Будь ласка, зауважте, що використано символ присвоювання `=`.

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

    print 2004-12

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

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

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

&kturtle; має і додаткові математичні можливості. Програмі відомі число `pi`, тригонометричні функції на зразок `sin`, `cos`, `tan`, `arcsin`, `arccos`, `arctan` і функції `sqrt` і `exp`.

### Дозвольте черепашці округлити ваші числа

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

round

      round(x)

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

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

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

## Задаємо питання, отримуємо відповіді...

`if` і `while` є регуляторами виконання, які обговорюватимуться у наступному розділі. У цьому розділі для пояснення способів використання питань буде використано команду the `if`.

### Питання

Простий випадок питання:

    $x = 6
    if $x > 5 {
      print "привіт"
    }

У цьому прикладі питанням є частина, що складається з `x > 5`. Якщо відповіддю на це питання буде "так", буде виконано код між дужками. Питання є важливою частиною програмування і часто використовуються разом з регуляторами виконання, на зразок `if`. За допомогою питань можна порівнювати між собою всі числа і змінні (контейнери з числами).

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

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

`a == b` | дорівнює | відповіддю буде так, якщо `a` рівне `b`
`a != b` | нерівності | відповіддю буде так, якщо `a` не рівне `b`
`a > b` | більше, ніж | відповіддю буде так, якщо `a` більше за `b`
`a < b` | менше, ніж | відповіддю буде так, якщо `a` менше за `b`
`a >= b` | більше або дорівнює | відповіддю буде так, якщо `a` більше або дорівнює `b`
`a <= b` | менше або дорівнює | відповіддю буде так, якщо `a` менше або дорівнює `b`

### Клей питань

Слова-клей питань надають змогу склеювати питання у одне велике питання.

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

У цьому прикладі слово-клей `and` використано для того, щоб об’єднати два питання (`a < 5`, `b == 5`). Якщо відповіддю на одну з частинок, об’єднаних за допомогою `and`, буде ні, відповіддю на склеєне питання також буде ні, оскільки, якщо використано слово-клей `and`, відповідь на склеєне питання буде так, лише якщо відповіді на його частинки також так. Будь ласка, не забудьте ставити дужки навколо кожного з питань!

Ось схематичний огляд, докладні пояснення розміщено за ним:

#### Слова-клей питань

`and` | Щоб відповіддю було "так", обидві частини повинні мати відповідь "так"
`or` | Якщо відповідь на одну з частин — "так", відповіддю на склеєне питання також буде "так"
`not` | Особливий випадок: працює лише для одинарних питань! Змінює відповідь "так" на "ні", а відповідь "ні" — на "так".

#### and

Якщо два питання склеюються разом за допомогою `and`, для того, щоб відповідь на загальне питання була "так", питання по обидві частини від `and` повинні мати відповідь "так". Приклад:

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

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

#### or

Якщо одне або обидва з питань, склеєних за допомогою `or`, має відповідь "так", відповіддю на склеєне питання буде "так". Приклад:

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

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

#### not

`not` є особливим словом-клеєм питань, оскільки воно працює лише з одинарним питанням. `not` змінює відповідь з "так" на "ні", а з "ні" на "так". Приклад:

    $a = 1
    $b = 5
    if not (($a < 10) and ($b == 5)) {
      print "привіт"
    }
    else
    {
      print "не привіт ;-)"
    }

У цьому прикладі питання, що склеюється, має відповідь "так" але слово-клей `not` змінює цю відповідь на "ні". Отже, в результаті на полотні буде написано `"не привіт ;-)"`.

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

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

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

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

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

wait

      wait X

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

      repeat 36 {
        forward 5
        turnright 10
        wait 0.5
      }

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

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

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. Оскільки значенням наданим у першому рядку `x` є 4, відповіддю на питання буде ні. Це означає, що буде виконано код між фігурними дужками, що стоять за командою `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` збільшується на 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

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

    reset

    learn multiplyBySelf $n {
      $r = $n * $n
      return $r
    }
    $i = ask "Будь ласка, введіть число і натисніть кнопку Гаразд"
    print $i + ", помножене на себе, дає: " + multiplyBySelf $i

У цьому випадку було створено нову команду з назвою `multiplyBySelf`. Вхідне число цієї команди множиться на себе і повертається іншій команді за допомогою команди `return`. Команда `return` — це спосіб вивести значення функції, яку ви створили.

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

    learn box $X, $Y {
      forward $Y
      turnright 90
      forward $X
      turnright 90
      forward $Y
      turnright 90
      forward $X
      turnright 90
    }

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