From 49c0548f5389f3f0f14ba00be25e50621b76c2a6 Mon Sep 17 00:00:00 2001 From: TheDmitry Date: Wed, 4 Feb 2015 11:04:25 +0300 Subject: Added Paren-Ru Guide draft --- ru-ru/paren-ru.html.markdown | 197 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 ru-ru/paren-ru.html.markdown (limited to 'ru-ru/paren-ru.html.markdown') diff --git a/ru-ru/paren-ru.html.markdown b/ru-ru/paren-ru.html.markdown new file mode 100644 index 00000000..86536d5e --- /dev/null +++ b/ru-ru/paren-ru.html.markdown @@ -0,0 +1,197 @@ +--- +language: Paren +filename: learnparen-ru.paren +contributors: + - ["KIM Taegyoon", "https://github.com/kimtg"] +translators: + - ["Dmitry Bessonov", "https://github.com/TheDmitry"] +lang: ru-ru +--- + +[Paren](https://bitbucket.org/ktg/paren) - это диалект языка Лисп. Он задуман +как втроенный язык. + +Некоторые примеры из . + +```scheme +;;; Комментарии +# комментарии + +;; Однострочные комментарии начинаются с точки с зяпятой или символа решетки + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 1. Примитивные типы данных и операторы +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Числа +123 ; int +3.14 ; double +6.02e+23 ; double +(int 3.14) ; => 3 : int +(double 123) ; => 123 : double + +;; Обращение к функции записывается (f x y z ...) +;; где f функция, а x, y, z, ... операнды +;; Если вы хотите создать список из букв, используйте (quote), чтобы +;; предотвратить ненужных вычислений +(quote (+ 1 2)) ; => (+ 1 2) +;; Теперь, некоторые арифметические операции +(+ 1 1) ; => 2 +(- 8 1) ; => 7 +(* 10 2) ; => 20 +(^ 2 3) ; => 8 +(/ 5 2) ; => 2 +(% 5 2) ; => 1 +(/ 5.0 2) ; => 2.5 + +;;; Логический тип +true ; обозначает истину +false ; обозначает ложь +(! true) ; => false +(&& true false (prn "doesn't get here")) ; => false +(|| false true (prn "doesn't get here")) ; => true + +;;; Символы - это числа (int). +(char-at "A" 0) ; => 65 +(chr 65) ; => "A" + +;;; Строки - это массив символов фиктированной длини. +"Привет, мир!" +"Benjamin \"Bugsy\" Siegel" ; обратная косая черта экранирует символ +"Foo\tbar\r\n" ; включает управляющие символы в стиле Cи: \t \r \n + +;; Строки тоже могут объединяться! +(strcat "Привет " "мир!") ; => "Привет мир!" + +;; Строка может трактоваться подобно списку символов +(char-at "Apple" 0) ; => 65 + +;; Выводить информацию достаточно легко +(pr "Я" "Paren. ") (prn "Приятно познакомиться!") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 2. Переменные +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Вы можете создать или инициализировать переменную, используя (set) +;; имя переменной может использовать любой символ исключая: ();#" +(set some-var 5) ; => 5 +some-var ; => 5 + +;; Обращение к переменной прежде не определенной вызовет исключение +; x ; => Неизвестная переменная: x : nil + +;; Локальное связывание: Используйте лямбда-вычисения! `a' и `b' связывается +;; с `1' и `2' только в пределах (fn ...) +((fn (a b) (+ a b)) 1 2) ; => 3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 3. Коллекции +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Списки + +;; Списки подобны динамическому массиву (vector). (где произвольный доступ равен O(1).) +(cons 1 (cons 2 (cons 3 (list)))) ; => (1 2 3) +;; `list' - это удобный конструктор списков с переменным числом элементов +(list 1 2 3) ; => (1 2 3) +;; и quote может также использоваться для литеральных значений списка +(quote (+ 1 2)) ; => (+ 1 2) + +;; Можно еще использовать `cons' чтобы добвить элемент в начало списка +(cons 0 (list 1 2 3)) ; => (0 1 2 3) + +;; Списки являются основным типом, поэтому для них предусмотренно *много* функций +;; немного примеров из них: +(map inc (list 1 2 3)) ; => (2 3 4) +(filter (fn (x) (== 0 (% x 2))) (list 1 2 3 4)) ; => (2 4) +(length (list 1 2 3 4)) ; => 4 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 3. Функции +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Используйте `fn' для создания функций. +;; Функция всегда возвращает значение своего последнего выражения +(fn () "Hello World") ; => (fn () Hello World) : fn + +;; Используйте скобки, чтобы вызвать все функции, в том числе лямбда выражение +((fn () "Привет Мир")) ; => "Привет Мир" + +;; Назначить функцию переменной +(set hello-world (fn () "Привет Мир")) +(hello-world) ; => "Привет Мир" + +;; Вы можете сократить это, используя синтаксический сахар определения функции: +(defn hello-world2 () "Привет Мир") + +;; Как и выше () - это список аргументов для функции +(set hello + (fn (name) + (strcat "Привет " name))) +(hello "Стив") ; => "Привет Стив" + +;; ... or equivalently, using a sugared definition: +(defn hello2 (name) + (strcat "Привет " name)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 4. Равенство +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; для чисел используйте `==' +(== 3 3.0) ; => true +(== 2 1) ; => false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 5. Поток управления +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Условный оператор + +(if true ; проверка выражения + "это - истина" ; то это выражение + "это - ложь") ; иначе другое выражение +; => "это - истина" + +;;; Циклы + +;; Цикл for для чисел +;; (for ИДЕТИФИКАТОР НАЧАЛО КОНЕЦ ШАГ ВЫРАЖЕНИЕ ..) +(for i 0 10 2 (pr i "")) ; => печатает 0 2 4 6 8 10 +(for i 0.0 10 2.5 (pr i "")) ; => печатает 0 2.5 5 7.5 10 + +;; Цикл while +((fn (i) + (while (< i 10) + (pr i) + (++ i))) 0) ; => печатает 0123456789 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 6. Изменение +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Используйте `set' чтобы назначить новое значение переменной или пространству +(set n 5) ; => 5 +(set n (inc n)) ; => 6 +n ; => 6 +(set a (list 1 2)) ; => (1 2) +(set (nth 0 a) 3) ; => 3 +a ; => (3 2) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 7. Макросы +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Макросы позволяют вам расширить синтаксис языка. +;; Paren-макросы легкие. +;; В действительности, (defn) - это макрос. +(defmacro setfn (name ...) (set name (fn ...))) +(defmacro defn (name ...) (def name (fn ...))) + +;; Давайте добавим инфиксную нотацию +(defmacro infix (a op ...) (op a ...)) +(infix 1 + 2 (infix 3 * 4)) ; => 15 + +;; Макросы приводят к неясному коду, т.е. вы можете затереть существующие переменные! +;; Они приобразуют код. +``` -- cgit v1.2.3 From 12753c9df6785d41dca51fbfce721e7450e3a939 Mon Sep 17 00:00:00 2001 From: TheDmitry Date: Thu, 5 Feb 2015 17:52:10 +0300 Subject: [paren/ru] Translating Paren guide into Russian --- ru-ru/paren-ru.html.markdown | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'ru-ru/paren-ru.html.markdown') diff --git a/ru-ru/paren-ru.html.markdown b/ru-ru/paren-ru.html.markdown index 86536d5e..ded3c4fa 100644 --- a/ru-ru/paren-ru.html.markdown +++ b/ru-ru/paren-ru.html.markdown @@ -8,8 +8,7 @@ translators: lang: ru-ru --- -[Paren](https://bitbucket.org/ktg/paren) - это диалект языка Лисп. Он задуман -как втроенный язык. +[Paren](https://bitbucket.org/ktg/paren) - это диалект языка Лисп. Он спроектирован как встроенный язык. Некоторые примеры из . @@ -17,7 +16,7 @@ lang: ru-ru ;;; Комментарии # комментарии -;; Однострочные комментарии начинаются с точки с зяпятой или символа решетки +;; Однострочные комментарии начинаются с точки с запятой или символа решетки ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1. Примитивные типы данных и операторы @@ -30,12 +29,12 @@ lang: ru-ru (int 3.14) ; => 3 : int (double 123) ; => 123 : double -;; Обращение к функции записывается (f x y z ...) +;; Обращение к функции записывается так: (f x y z ...), ;; где f функция, а x, y, z, ... операнды ;; Если вы хотите создать список из букв, используйте (quote), чтобы ;; предотвратить ненужных вычислений (quote (+ 1 2)) ; => (+ 1 2) -;; Теперь, некоторые арифметические операции +;; Итак, некоторые арифметические операции (+ 1 1) ; => 2 (- 8 1) ; => 7 (* 10 2) ; => 20 @@ -48,14 +47,14 @@ lang: ru-ru true ; обозначает истину false ; обозначает ложь (! true) ; => false -(&& true false (prn "doesn't get here")) ; => false -(|| false true (prn "doesn't get here")) ; => true +(&& true false (prn "досюда не доходим")) ; => false +(|| false true (prn "досюда не доходим")) ; => true ;;; Символы - это числа (int). (char-at "A" 0) ; => 65 (chr 65) ; => "A" -;;; Строки - это массив символов фиктированной длини. +;;; Строки - это массив символов с фиксированной длиной. "Привет, мир!" "Benjamin \"Bugsy\" Siegel" ; обратная косая черта экранирует символ "Foo\tbar\r\n" ; включает управляющие символы в стиле Cи: \t \r \n @@ -73,14 +72,14 @@ false ; обозначает ложь ;; 2. Переменные ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Вы можете создать или инициализировать переменную, используя (set) -;; имя переменной может использовать любой символ исключая: ();#" +;; имя переменной может содержать любой символ, исключая: ();#" (set some-var 5) ; => 5 some-var ; => 5 -;; Обращение к переменной прежде не определенной вызовет исключение +;; Обращение к переменной, прежде не определенной, вызовет исключение ; x ; => Неизвестная переменная: x : nil -;; Локальное связывание: Используйте лямбда-вычисения! `a' и `b' связывается +;; Локальное связывание: Используйте лямбда-вычисление! `a' и `b' связывается ;; с `1' и `2' только в пределах (fn ...) ((fn (a b) (+ a b)) 1 2) ; => 3 @@ -90,17 +89,17 @@ some-var ; => 5 ;;; Списки -;; Списки подобны динамическому массиву (vector). (где произвольный доступ равен O(1).) +;; Списки подобны динамическому массиву (vector). (произвольный доступ равен O(1).) (cons 1 (cons 2 (cons 3 (list)))) ; => (1 2 3) ;; `list' - это удобный конструктор списков с переменным числом элементов (list 1 2 3) ; => (1 2 3) ;; и quote может также использоваться для литеральных значений списка (quote (+ 1 2)) ; => (+ 1 2) -;; Можно еще использовать `cons' чтобы добвить элемент в начало списка +;; Можно еще использовать `cons', чтобы добавить элемент в начало списка (cons 0 (list 1 2 3)) ; => (0 1 2 3) -;; Списки являются основным типом, поэтому для них предусмотренно *много* функций +;; Списки являются основным типом, поэтому для них предусмотрено *много* функций ;; немного примеров из них: (map inc (list 1 2 3)) ; => (2 3 4) (filter (fn (x) (== 0 (% x 2))) (list 1 2 3 4)) ; => (2 4) @@ -112,7 +111,7 @@ some-var ; => 5 ;; Используйте `fn' для создания функций. ;; Функция всегда возвращает значение своего последнего выражения -(fn () "Hello World") ; => (fn () Hello World) : fn +(fn () "Привет Мир") ; => (fn () Привет Мир) : fn ;; Используйте скобки, чтобы вызвать все функции, в том числе лямбда выражение ((fn () "Привет Мир")) ; => "Привет Мир" @@ -130,7 +129,7 @@ some-var ; => 5 (strcat "Привет " name))) (hello "Стив") ; => "Привет Стив" -;; ... or equivalently, using a sugared definition: +;; ... или что эквивалентно, используйте синтаксический сахар определения: (defn hello2 (name) (strcat "Привет " name)) @@ -149,7 +148,7 @@ some-var ; => 5 ;;; Условный оператор (if true ; проверка выражения - "это - истина" ; то это выражение + "это - истина" ; тогда это выражение "это - ложь") ; иначе другое выражение ; => "это - истина" @@ -170,7 +169,7 @@ some-var ; => 5 ;; 6. Изменение ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Используйте `set' чтобы назначить новое значение переменной или пространству +;; Используйте `set', чтобы назначить новое значение переменной или памяти (set n 5) ; => 5 (set n (inc n)) ; => 6 n ; => 6 @@ -182,9 +181,9 @@ a ; => (3 2) ;; 7. Макросы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Макросы позволяют вам расширить синтаксис языка. +;; Макросы позволяют вам расширять синтаксис языка. ;; Paren-макросы легкие. -;; В действительности, (defn) - это макрос. +;; Фактически, (defn) - это макрос. (defmacro setfn (name ...) (set name (fn ...))) (defmacro defn (name ...) (def name (fn ...))) @@ -193,5 +192,5 @@ a ; => (3 2) (infix 1 + 2 (infix 3 * 4)) ; => 15 ;; Макросы приводят к неясному коду, т.е. вы можете затереть существующие переменные! -;; Они приобразуют код. +;; Они являются кодопреобразующей конструкцией. ``` -- cgit v1.2.3 From 8a469f8b9bf3bbf26e290c744f8c87578842a493 Mon Sep 17 00:00:00 2001 From: TheDmitry Date: Mon, 9 Feb 2015 17:30:18 +0300 Subject: [paren/ru] Fix typo --- ru-ru/paren-ru.html.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'ru-ru/paren-ru.html.markdown') diff --git a/ru-ru/paren-ru.html.markdown b/ru-ru/paren-ru.html.markdown index ded3c4fa..9b801e46 100644 --- a/ru-ru/paren-ru.html.markdown +++ b/ru-ru/paren-ru.html.markdown @@ -10,7 +10,7 @@ lang: ru-ru [Paren](https://bitbucket.org/ktg/paren) - это диалект языка Лисп. Он спроектирован как встроенный язык. -Некоторые примеры из . +Примеры взяты . ```scheme ;;; Комментарии @@ -30,9 +30,9 @@ lang: ru-ru (double 123) ; => 123 : double ;; Обращение к функции записывается так: (f x y z ...), -;; где f функция, а x, y, z, ... операнды -;; Если вы хотите создать список из букв, используйте (quote), чтобы -;; предотвратить ненужных вычислений +;; где f - функция, а x, y, z, ... - операнды +;; Если вы хотите создать буквальный список данных, используйте (quote), чтобы +;; предотвратить ненужные вычисления (quote (+ 1 2)) ; => (+ 1 2) ;; Итак, некоторые арифметические операции (+ 1 1) ; => 2 @@ -113,7 +113,7 @@ some-var ; => 5 ;; Функция всегда возвращает значение своего последнего выражения (fn () "Привет Мир") ; => (fn () Привет Мир) : fn -;; Используйте скобки, чтобы вызвать все функции, в том числе лямбда выражение +;; Используйте скобки, чтобы вызвать все функции, в том числе лямбда-выражение ((fn () "Привет Мир")) ; => "Привет Мир" ;; Назначить функцию переменной @@ -123,13 +123,13 @@ some-var ; => 5 ;; Вы можете сократить это, используя синтаксический сахар определения функции: (defn hello-world2 () "Привет Мир") -;; Как и выше () - это список аргументов для функции +;; Как и выше, () - это список аргументов для функции (set hello (fn (name) (strcat "Привет " name))) (hello "Стив") ; => "Привет Стив" -;; ... или что эквивалентно, используйте синтаксический сахар определения: +;; ... или, что эквивалентно, используйте синтаксический сахар определения: (defn hello2 (name) (strcat "Привет " name)) @@ -155,7 +155,7 @@ some-var ; => 5 ;;; Циклы ;; Цикл for для чисел -;; (for ИДЕТИФИКАТОР НАЧАЛО КОНЕЦ ШАГ ВЫРАЖЕНИЕ ..) +;; (for ИДЕНТИФИКАТОР НАЧАЛО КОНЕЦ ШАГ ВЫРАЖЕНИЕ ..) (for i 0 10 2 (pr i "")) ; => печатает 0 2 4 6 8 10 (for i 0.0 10 2.5 (pr i "")) ; => печатает 0 2.5 5 7.5 10 -- cgit v1.2.3