diff --git a/ru-ru/forth-ru.html.markdown b/ru-ru/forth-ru.html.markdown index e228a402..21ed26c6 100644 --- a/ru-ru/forth-ru.html.markdown +++ b/ru-ru/forth-ru.html.markdown @@ -8,18 +8,21 @@ filename: learnforth-ru.fs lang: ru-ru --- -Форт создан Чарлзом Муром в 70-е годы. Это императивный, стековый язык программирования и среда исполнения программ. Использовался в таких проектах как Open Firmware. Продолжает применятся в проектах. Применяется в НАСА. +Форт создан Чарлзом Муром в 70-е годы. Это императивный, стековый язык +программирования и среда исполнения программ. Использовался в таких проектах +как Open Firmware. Продолжает применяться в проектах. Применяется в НАСА. -Внимание: этот материал использует реализацию Форта - Gforth, но большая часть написанного будет работать в других средах. +Внимание: этот материал использует реализацию Форта - Gforth, но большая часть +написанного будет работать в других средах. ```forth \ Это комментарий -( Это тоже комментарий, но используется для предоределённых слов ) +( Это тоже комментарий, но используется для предопределённых слов ) \ --------------------------------- Прекурсор -------------------------------- -\ Всё программирование на Форте заключается в манипулировании +\ Всё программирование на Форте заключается в манипулировании \ параметрами на стеке. 5 2 3 56 76 23 65 \ ok @@ -31,7 +34,7 @@ lang: ru-ru \ ---------------------------- Базовая арифметика ---------------------------- -\ Арифметика (фактически все ключевые слова требуют данных) - это манипуляция +\ Арифметика (фактически все ключевые слова требуют данных) - это манипуляция \ данными на стеке. 5 4 + \ ok @@ -51,10 +54,10 @@ lang: ru-ru \ --------------------------- Манипуляции со стеком --------------------------- -\ Естественно, когда мы работаем со стеком, то используем +\ Естественно, когда мы работаем со стеком, то используем \ больше полезных методов: -3 dup - \ дублировать верхний элемент в стеке +3 dup - \ дублировать верхний элемент в стеке \ (1-й становится эквивалентным 2-му): 3 - 3 2 5 swap / \ поменять местами верхний элемент со 2-м элементом: 5 / 2 6 4 5 rot .s \ сменять по очереди 3-и верхних элемента: 4 5 6 @@ -63,20 +66,20 @@ lang: ru-ru \ ------------------ Более продвинутые манипуляции со стеком ------------------ -1 2 3 4 tuck \ дублировать верхний елемент стека во вторую позицию: +1 2 3 4 tuck \ дублировать верхний элемент стека во вторую позицию: \ 1 2 4 3 4 ok -1 2 3 4 over \ диблировать второй елемент наверх стека: +1 2 3 4 over \ дублировать второй элемент наверх стека: \ 1 2 3 4 3 ok 1 2 3 4 2 roll \ *переместить* элемент в заданной позиции наверх стека: \ 1 3 4 2 ok -1 2 3 4 2 pick \ *дублировать* элемент в заданной позиции наверх: +1 2 3 4 2 pick \ *дублировать* элемент в заданной позиции наверх: \ 1 2 3 4 2 ok \ Внимание! Обращения к стеку индексируются с нуля. \ --------------------------- Создание новых слов ----------------------------- -\ Определение новых слов через уже известные. Двоеточие `:` переводит Форт +\ Определение новых слов через уже известные. Двоеточие `:` переводит Форт \ в режим компиляции выражения, которое заканчивается точкой с запятой `;`. : square ( n -- n ) dup * ; \ ok 5 square . \ 25 ok @@ -86,15 +89,15 @@ see square \ : square dup * ; ok \ -------------------------------- Зависимости -------------------------------- -\ -1 == true, 0 == false. Однако, некоторые ненулевые значения +\ -1 == true, 0 == false. Однако, некоторые ненулевые значения \ обрабатываются как true: 42 42 = \ -1 ok 12 53 = \ 0 ok \ `if` это компилируемое слово. `if` `then` . -: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" then ; +: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" then ; \ ok -100 ?>64 +100 ?>64 \ Больше чем 64! ok \ Else: @@ -119,7 +122,7 @@ myloop : one-to-12 ( -- ) 12 0 do i . loop ; \ ok one-to-12 \ 0 1 2 3 4 5 6 7 8 9 10 11 12 ok -\ `?do` работает подобным образом, за исключением пропуска начального +\ `?do` работает подобным образом, за исключением пропуска начального \ и конечного значения индекса цикла. : squares ( n -- ) 0 ?do i square . loop ; \ ok 10 squares \ 0 1 4 9 16 25 36 49 64 81 ok @@ -139,13 +142,13 @@ variable age \ ok \ Затем мы запишем число 21 в переменную 'age' (возраст) словом `!`. 21 age ! \ ok -\ В заключении мы можем напечатать значение переменной прочитав его словом `@`, -\ которое добавит значение на стек или использовать слово `?`, +\ В заключении мы можем напечатать значение переменной прочитав его словом `@`, +\ которое добавит значение на стек или использовать слово `?`, \ что бы прочитать и распечатать в одно действие. age @ . \ 21 ok age ? \ 21 ok -\ Константы объявляются аналогично, за исключем того, что мы не должны +\ Константы объявляются аналогично, за исключем того, что мы не должны \ беспокоиться о выделении адреса в памяти: 100 constant WATER-BOILING-POINT \ ok WATER-BOILING-POINT . \ 100 ok @@ -155,7 +158,7 @@ WATER-BOILING-POINT . \ 100 ok \ Создание массива похоже на объявление переменной, но нам нужно выделить \ больше памяти. -\ Вы можете использовать слова `2 cells allot` для создания массива +\ Вы можете использовать слова `2 cells allot` для создания массива \ размером 3 элемента: variable mynumbers 2 cells allot \ ok @@ -165,7 +168,7 @@ mynumbers 3 cells erase \ ok \ В качестве альтернативы мы можем использовать `fill`: mynumbers 3 cells 0 fill -\ или мы можем пропустить все слова выше и инициализировать массив +\ или мы можем пропустить все слова выше и инициализировать массив \ нужными значениями: create mynumbers 64 , 9001 , 1337 , \ ok (the last `,` is important!) @@ -205,7 +208,7 @@ mynumbers 1 of-arr ? \ 20 ok \ ---------------- Операции над числами с плавающей точкой -------------------- -\ Многие фортовцы стараются избегать использование слов с вещественными числами. +\ Многие фортовцы стараются избегать использования слов с вещественными числами. 8.3e 0.8e f+ f. \ 9.1 ok \ Обычно мы просто используем слово 'f', когда обращаемся к вещественным числам: @@ -215,7 +218,7 @@ myfloatingvar f@ f. \ 4.4 ok \ ---------- В завершение несколько полезных замечаний и слов ----------------- -\ Указание несуществующего слова очистит стек. Тем не менее, есть специальное +\ Указание несуществующего слова очистит стек. Тем не менее, есть специальное \ слово для этого: clearstack