From 9842c8859b03e34f0ba09a3e6885218d67a3862d Mon Sep 17 00:00:00 2001 From: Boris Verkhovskiy Date: Thu, 16 May 2024 03:23:02 -0600 Subject: Correct URLs --- es-es/learnsmallbasic-es.html.markdown | 132 --------------- es-es/smallbasic-es.html.markdown | 132 +++++++++++++++ ru-ru/learnvisualbasic-ru.html.markdown | 283 -------------------------------- ru-ru/visualbasic-ru.html.markdown | 283 ++++++++++++++++++++++++++++++++ zh-cn/clojure-macro-cn.html.markdown | 150 ----------------- zh-cn/clojure-macros-cn.html.markdown | 150 +++++++++++++++++ 6 files changed, 565 insertions(+), 565 deletions(-) delete mode 100644 es-es/learnsmallbasic-es.html.markdown create mode 100644 es-es/smallbasic-es.html.markdown delete mode 100644 ru-ru/learnvisualbasic-ru.html.markdown create mode 100644 ru-ru/visualbasic-ru.html.markdown delete mode 100644 zh-cn/clojure-macro-cn.html.markdown create mode 100644 zh-cn/clojure-macros-cn.html.markdown diff --git a/es-es/learnsmallbasic-es.html.markdown b/es-es/learnsmallbasic-es.html.markdown deleted file mode 100644 index a0a80454..00000000 --- a/es-es/learnsmallbasic-es.html.markdown +++ /dev/null @@ -1,132 +0,0 @@ ---- -language: SmallBASIC -filename: learnsmallbasic-es.bas -contributors: - - ["Chris Warren-Smith", "http://smallbasic.sourceforge.net"] -translators: - - ["José Juan Hernández García", "http://jjuanhdez.es"] -lang: es-es ---- - -## Acerca de - -SmallBASIC es un intérprete del lenguaje BASIC rápido y fácil de aprender, ideal para cálculos cotidianos, scripts y prototipos. SmallBASIC incluye funciones trigonométricas, matrices y álgebra, un IDE integrado, una potente librería de cadenas de texto, comandos de sistema, sonido y gráficos, junto con una sintaxis de programación estructurada. - -## Desarrollo - -SmallBASIC fue desarrollado originalmente por Nicholas Christopoulos a finales de 1999 para el Palm Pilot. El desarrollo del proyecto ha sido continuado por Chris Warren-Smith desde el año 2005. -Versiones de SmallBASIC se han hecho para una serie dispositivos de mano antiguos, incluyendo Franklin eBookman y el Nokia 770. También se han publicado varias versiones de escritorio basadas en una variedad de kits de herramientas GUI, algunas de las cuales han desaparecido. Las plataformas actualmente soportadas son Linux y Windows basadas en SDL2 y Android basadas en NDK. También está disponible una versión de línea de comandos de escritorio, aunque no suele publicarse en formato binario. -Alrededor de 2008 una gran corporación lanzó un entorno de programación BASIC con un nombre de similar. SmallBASIC no está relacionado con este otro proyecto. - -``` -REM Esto es un comentario -' y esto tambien es un comentario - -REM Imprimir texto -PRINT "hola" -? "? es la abreviatura de PRINT" - -REM Estructuras de control -FOR index = 0 TO 10 STEP 2 - ? "Este es el numero de linea "; index -NEXT -J = 0 -REPEAT - J++ -UNTIL J = 10 -WHILE J > 0 - J-- -WEND - -REM Estructura Select Case -SELECT CASE "Cool" - CASE "null", 1, 2, 3, 4, 5, 6, 7, 8, "Cool", "blah" - CASE "No Cool" - PRINT "Fallo epico" - CASE ELSE - PRINT "Fallo" -END SELECT - -REM Captura de errores con TRY/CATCH -TRY - fn = Freefile - OPEN filename FOR INPUT As #fn -CATCH err - PRINT "No se pudo abrir" -END TRY - -REM Procedimientos y funciones definidas por el usuario -FUNC add2(x, y) - ' variables pueden declararse como locales en el ambito de una SUB o FUNC - LOCAL k - k = "k dejara de existir cuando retorne FUNC" - add2 = x + y -END -PRINT add2(5, 5) - -SUB print_it(it) - PRINT it -END -print_it "IT...." - -REM Visualizacion de lineas y pixeles -At 0, ymax / 2 + txth ("Q") -COLOR 1: ? "sin(x)": -COLOR 8: ? "cos(x)": -COLOR 12: ? "tan(x)" -LINE 0, ymax / 2, xmax, ymax / 2 -FOR i = 0 TO xmax - PSET i, ymax / 2 - SIN(i * 2 * pi / ymax) * ymax / 4 COLOR 1 - PSET i, ymax / 2 - COS(i * 2 * pi / ymax) * ymax / 4 COLOR 8 - PSET i, ymax / 2 - TAN(i * 2 * pi / ymax) * ymax / 4 COLOR 12 -NEXT -SHOWPAGE - -REM SmallBASIC es ideal para experimentar con fractales y otros efectos interesantes -DELAY 3000 -RANDOMIZE -ff = 440.03 -FOR j = 0 TO 20 - r = RND * 1000 % 255 - b = RND * 1000 % 255 - g = RND * 1000 % 255 - c = RGB(r, b, g) - ff += 9.444 - FOR i = 0 TO 25000 - ff += ff - x = MIN(xmax, -x + COS(f * i)) - y = MIN(ymax, -y + SIN(f * i)) - PSET x, y COLOR c - IF (i % 1000 == 0) THEN - SHOWPAGE - fi - NEXT -NEXT j - -REM Para historiadores de computadoras, SmallBASIC puede ejecutar programas -REM encontrados en los primeros libros de computacion y revistas, por ejemplo: -10 LET A = 9 -20 LET B = 7 -30 PRINT A * B -40 PRINT A / B - -REM SmallBASIC también tiene soporte para algunos conceptos modernos como JSON -aa = ARRAY("{\"cat\":{\"name\":\"harry\"},\"pet\":\"true\"}") -IF (ismap(aa) == false) THEN - THROW "no es un mapa" -END IF -PRINT aa - -PAUSE -``` - -## Artículos - -* [Primeros pasos](http://smallbasic.sourceforge.net/?q=node/1573) -* [Bienvenido a SmallBASIC](http://smallbasic.sourceforge.net/?q=node/838) - -## GitHub - -* [Código fuente](https://github.com/smallbasic/SmallBASIC) -* [Reference snapshot](http://smallbasic.github.io/) - diff --git a/es-es/smallbasic-es.html.markdown b/es-es/smallbasic-es.html.markdown new file mode 100644 index 00000000..a0a80454 --- /dev/null +++ b/es-es/smallbasic-es.html.markdown @@ -0,0 +1,132 @@ +--- +language: SmallBASIC +filename: learnsmallbasic-es.bas +contributors: + - ["Chris Warren-Smith", "http://smallbasic.sourceforge.net"] +translators: + - ["José Juan Hernández García", "http://jjuanhdez.es"] +lang: es-es +--- + +## Acerca de + +SmallBASIC es un intérprete del lenguaje BASIC rápido y fácil de aprender, ideal para cálculos cotidianos, scripts y prototipos. SmallBASIC incluye funciones trigonométricas, matrices y álgebra, un IDE integrado, una potente librería de cadenas de texto, comandos de sistema, sonido y gráficos, junto con una sintaxis de programación estructurada. + +## Desarrollo + +SmallBASIC fue desarrollado originalmente por Nicholas Christopoulos a finales de 1999 para el Palm Pilot. El desarrollo del proyecto ha sido continuado por Chris Warren-Smith desde el año 2005. +Versiones de SmallBASIC se han hecho para una serie dispositivos de mano antiguos, incluyendo Franklin eBookman y el Nokia 770. También se han publicado varias versiones de escritorio basadas en una variedad de kits de herramientas GUI, algunas de las cuales han desaparecido. Las plataformas actualmente soportadas son Linux y Windows basadas en SDL2 y Android basadas en NDK. También está disponible una versión de línea de comandos de escritorio, aunque no suele publicarse en formato binario. +Alrededor de 2008 una gran corporación lanzó un entorno de programación BASIC con un nombre de similar. SmallBASIC no está relacionado con este otro proyecto. + +``` +REM Esto es un comentario +' y esto tambien es un comentario + +REM Imprimir texto +PRINT "hola" +? "? es la abreviatura de PRINT" + +REM Estructuras de control +FOR index = 0 TO 10 STEP 2 + ? "Este es el numero de linea "; index +NEXT +J = 0 +REPEAT + J++ +UNTIL J = 10 +WHILE J > 0 + J-- +WEND + +REM Estructura Select Case +SELECT CASE "Cool" + CASE "null", 1, 2, 3, 4, 5, 6, 7, 8, "Cool", "blah" + CASE "No Cool" + PRINT "Fallo epico" + CASE ELSE + PRINT "Fallo" +END SELECT + +REM Captura de errores con TRY/CATCH +TRY + fn = Freefile + OPEN filename FOR INPUT As #fn +CATCH err + PRINT "No se pudo abrir" +END TRY + +REM Procedimientos y funciones definidas por el usuario +FUNC add2(x, y) + ' variables pueden declararse como locales en el ambito de una SUB o FUNC + LOCAL k + k = "k dejara de existir cuando retorne FUNC" + add2 = x + y +END +PRINT add2(5, 5) + +SUB print_it(it) + PRINT it +END +print_it "IT...." + +REM Visualizacion de lineas y pixeles +At 0, ymax / 2 + txth ("Q") +COLOR 1: ? "sin(x)": +COLOR 8: ? "cos(x)": +COLOR 12: ? "tan(x)" +LINE 0, ymax / 2, xmax, ymax / 2 +FOR i = 0 TO xmax + PSET i, ymax / 2 - SIN(i * 2 * pi / ymax) * ymax / 4 COLOR 1 + PSET i, ymax / 2 - COS(i * 2 * pi / ymax) * ymax / 4 COLOR 8 + PSET i, ymax / 2 - TAN(i * 2 * pi / ymax) * ymax / 4 COLOR 12 +NEXT +SHOWPAGE + +REM SmallBASIC es ideal para experimentar con fractales y otros efectos interesantes +DELAY 3000 +RANDOMIZE +ff = 440.03 +FOR j = 0 TO 20 + r = RND * 1000 % 255 + b = RND * 1000 % 255 + g = RND * 1000 % 255 + c = RGB(r, b, g) + ff += 9.444 + FOR i = 0 TO 25000 + ff += ff + x = MIN(xmax, -x + COS(f * i)) + y = MIN(ymax, -y + SIN(f * i)) + PSET x, y COLOR c + IF (i % 1000 == 0) THEN + SHOWPAGE + fi + NEXT +NEXT j + +REM Para historiadores de computadoras, SmallBASIC puede ejecutar programas +REM encontrados en los primeros libros de computacion y revistas, por ejemplo: +10 LET A = 9 +20 LET B = 7 +30 PRINT A * B +40 PRINT A / B + +REM SmallBASIC también tiene soporte para algunos conceptos modernos como JSON +aa = ARRAY("{\"cat\":{\"name\":\"harry\"},\"pet\":\"true\"}") +IF (ismap(aa) == false) THEN + THROW "no es un mapa" +END IF +PRINT aa + +PAUSE +``` + +## Artículos + +* [Primeros pasos](http://smallbasic.sourceforge.net/?q=node/1573) +* [Bienvenido a SmallBASIC](http://smallbasic.sourceforge.net/?q=node/838) + +## GitHub + +* [Código fuente](https://github.com/smallbasic/SmallBASIC) +* [Reference snapshot](http://smallbasic.github.io/) + diff --git a/ru-ru/learnvisualbasic-ru.html.markdown b/ru-ru/learnvisualbasic-ru.html.markdown deleted file mode 100644 index e9934822..00000000 --- a/ru-ru/learnvisualbasic-ru.html.markdown +++ /dev/null @@ -1,283 +0,0 @@ ---- -language: Visual Basic -contributors: - - ["Brian Martin", "http://brianmartin.biz"] -translators: - - ["satory-ra", "https://github.com/satory-ra"] -filename: learnvisualbasic-ru.vb -lang: ru-ru ---- - -```vbnet -Module Module1 - - Sub Main() - 'Краткий обзор консольных приложений Visual Basic перед более - 'глубоким изучением. - 'Апостроф начинает строку комментария. - 'Чтобы изучить это руководство в компиляторе Visual Basic, - 'я создал систему навигации. - 'Эта система будет объяснена при прохождении этого урока. - 'Постепенно вы всё поймете. - Console.Title = ("Выучи Х за Y минут") - Console.WriteLine("НАВИГАЦИЯ") 'Display - Console.WriteLine("") - Console.ForegroundColor = ConsoleColor.Green - Console.WriteLine("1. Вывод данных") - Console.WriteLine("2. Ввод данных") - Console.WriteLine("3. Расчёт целых чисел") - Console.WriteLine("4. Расчёт десятичных дробей") - Console.WriteLine("5. Калькулятор") - Console.WriteLine("6. Использование циклов Do While") - Console.WriteLine("7. Использование циклов For") - Console.WriteLine("8. Условные выражения") - Console.WriteLine("9. Выберите напиток") - Console.WriteLine("50. О приложении") - Console.WriteLine("Выберите номер из списка") - Dim selection As String = Console.ReadLine - '«Case» в операторе Select не является обязательным. - 'Например, "Select selection" вместо "Select Case selection" - 'также будет работать. - Select Case selection - Case "1" 'Вывод данных - Console.Clear() 'Очищает окно консоли - HelloWorldOutput() 'Открывает приватную подпрограмму. - Case "2" 'Ввод данных - Console.Clear() - HelloWorldInput() - Case "3" 'Расчёт целых чисел - Console.Clear() - CalculatingWholeNumbers() - Case "4" 'Расчёт десятичных дробей - Console.Clear() - CalculatingDecimalNumbers() - Case "5" 'Калькулятор - Console.Clear() - WorkingCalculator() - Case "6" 'Использование циклов Do While - Console.Clear() - UsingDoWhileLoops() - Case "7" 'Использование циклов For - Console.Clear() - UsingForLoops() - Case "8" 'Условные выражения - Console.Clear() - ConditionalStatement() - Case "9" 'Выражения If/Else - Console.Clear() - IfElseStatement() 'Выберите напиток - Case "50" 'Окно сообщения «О приложении» - Console.Clear() - Console.Title = ("Выучи Х за Y минут :: О приложении") - MsgBox("Это руководство от Брайана Мартина (@BrianMartinn") - Console.Clear() - Main() - Console.ReadLine() - - End Select - End Sub - - 'Один - Я использую эти цифры для того, чтобы было проще - 'соотносить код с системой навигации. - - 'Мы используем частные подпрограммы для разделения различных - 'разделов программы. - Private Sub HelloWorldOutput() - 'Название консольного приложения - Console.Title = "Вывод данных | Выучи Х за Y минут" - 'Используйте Console.Write ("") или Console.WriteLine ("") - 'для отображения результатов. - 'Затем следует Console.Read () или Console.Readline () - 'Console.ReadLine () показывает вывод в консоли. - Console.WriteLine("Hello World") - Console.ReadLine() - End Sub - - 'Два - Private Sub HelloWorldInput() - Console.Title = "Ввод данных | Выучи Х за Y минут" - 'Переменная - 'используется для хранения пользовательских данных. - 'Объявление переменных начинается с Dim и заканчиваются - 'As VariableType (тип переменной). - - 'В этом уроке мы хотим узнать ваше имя и заставить программу - 'реагировать на это. - Dim username As String - 'Мы используем тип «string», так как ваше имя - это текстовая переменная. - Console.WriteLine("Привет, как тебя зовут? ") 'Просит ввести имя. - username = Console.ReadLine() 'Сохраняет имя в переменной username. - Console.WriteLine("Пирвет, " + username) 'Выводит: «Привет, 'имя'» - Console.ReadLine() 'Отображает вышеуказанный вывод. - - 'Вышеуказанная программа спросит ваше имя и скажет вам привет. - 'Есть и другие типы переменных, такие как целые числа (Integer), - 'мы используем Integer для обработки целых чисел. - End Sub - - 'Три - Private Sub CalculatingWholeNumbers() - Console.Title = "Расчёт целых чисел | Выучи Х за Y минут" - Console.Write("Первое число: ") 'Введите первое целое число: 1, 2, 50, 104 и т.д. - Dim a As Integer = Console.ReadLine() - Console.Write("Второе число: ") 'Введите второе целое число. - Dim b As Integer = Console.ReadLine() - Dim c As Integer = a + b - Console.WriteLine(c) - Console.ReadLine() - 'Приведенная программа сумирует два целых числа - End Sub - - 'Четыре - Private Sub CalculatingDecimalNumbers() - Console.Title = "Расчёт десятичных дробей | Выучи Х за Y минут" - 'Мы также должны уметь обрабатывать десятичные дроби. - 'Просто измените тип переменной с Integer на Double. - - 'Введите число с плавающей точкой: 1.2, 2.4, 50.1, 104.9 и т.д. - Console.Write("Первое число: ") - Dim a As Double = Console.ReadLine - Console.Write("Второе число: ") 'Введите второе число с плавающей точкой. - Dim b As Double = Console.ReadLine - Dim c As Double = a + b - Console.WriteLine(c) - Console.ReadLine() - 'Приведенный выше код может сложить две десятичных дроби. - End Sub - - 'Пять - Private Sub WorkingCalculator() - Console.Title = "Калькулятор | Выучи Х за Y минут" - 'Но что, если вам нужен калькулятор, который может обрабатывать сложение, - 'вычитание, умножение и деление? - 'Просто скопируйте и вставьте приведенный код. - Console.Write("Первое число: ") - Dim a As Double = Console.ReadLine - Console.Write("Второе число: ") - Dim b As Double = Console.ReadLine - Dim c As Double = a + b - Dim d As Double = a * b - Dim e As Double = a - b - Dim f As Double = a / b - - 'С помощью следующего кода мы можем вывести результат сложения, - 'вычитания, умножения и деления, рассчитанный выше, на экран. - Console.Write(a.ToString() + " + " + b.ToString()) - 'Мы хотим, чтобы в начале ответа было 3 пробела, для этого - 'вы можете использовать метод String.PadLeft (3). - Console.WriteLine(" = " + c.ToString.PadLeft(3)) - Console.Write(a.ToString() + " * " + b.ToString()) - Console.WriteLine(" = " + d.ToString.PadLeft(3)) - Console.Write(a.ToString() + " - " + b.ToString()) - Console.WriteLine(" = " + e.ToString.PadLeft(3)) - Console.Write(a.ToString() + " / " + b.ToString()) - Console.WriteLine(" = " + f.ToString.PadLeft(3)) - Console.ReadLine() - - End Sub - - 'Шесть - Private Sub UsingDoWhileLoops() - 'Код такой же, как и в предидущей подпрограмме - 'На этот раз мы спрашиваем, хочет ли пользователь продолжить (да или нет?) - 'Мы будем использовать цикл Do While, потому что не знаем, - 'понадобиться ли пользователю калькулятор болше одного раза. - Console.Title = "Использование циклов Do While | Выучи Х за Y минут" - Dim answer As String - 'Мы используем тип переменной "String", так как её значение текст. - Do 'Мы начаем программу с - Console.Write("Первое число: ") - Dim a As Double = Console.ReadLine - Console.Write("Второе число: ") - Dim b As Double = Console.ReadLine - Dim c As Double = a + b - Dim d As Double = a * b - Dim e As Double = a - b - Dim f As Double = a / b - - Console.Write(a.ToString() + " + " + b.ToString()) - Console.WriteLine(" = " + c.ToString.PadLeft(3)) - Console.Write(a.ToString() + " * " + b.ToString()) - Console.WriteLine(" = " + d.ToString.PadLeft(3)) - Console.Write(a.ToString() + " - " + b.ToString()) - Console.WriteLine(" = " + e.ToString.PadLeft(3)) - Console.Write(a.ToString() + " / " + b.ToString()) - Console.WriteLine(" = " + f.ToString.PadLeft(3)) - Console.ReadLine() - 'Спросите пользователя, хочет ли он продолжить, - 'в ответе учитывается регистр букв. - Console.Write("Желаете ли вы продолжить? (да / нет)") - 'Программа берет значение и записывает в переменную answer. - answer = Console.ReadLine() - 'Когда пользователь вводит «да», программа переходит к Do и снова запускается. - Loop While answer = "yes" - - End Sub - - 'Семь - Private Sub UsingForLoops() - 'Иногда программу нужно запускать только один раз. - 'В этой программе мы осуществим обратный отсчет от 10. - - Console.Title = "Использование циклов For | Выучи Х за Y минут" - 'Объявите переменные и Step (размер шага, то есть скорость уменьшения, - 'например, -1, -2, -3 и т.д.). - For i As Integer = 10 To 0 Step -1 - Console.WriteLine(i.ToString) 'Показывает значение счетчика. - Next i 'Рассчитать новое значение i. - Console.WriteLine("Поехали") - Console.ReadLine() - End Sub - - 'Восемь - Private Sub ConditionalStatement() - Console.Title = "Условные выражения | Выучи Х за Y минут" - Dim userName As String - Console.WriteLine("Привет, как тебя зовут? ") 'Спросите имя пользователя. - userName = Console.ReadLine() 'Записать имя в переменную userName. - If userName = "Адам" Then - Console.WriteLine("Привет, Адам") - Console.WriteLine("Спасибо за создание этого полезного сайта") - Console.ReadLine() - Else - Console.WriteLine("Привет " + userName) - Console.WriteLine("Вы заглянули на сайт www.learnxinyminutes.com") - Console.ReadLine() 'Программа останавливается и выводит вышеуказанный текст. - End If - End Sub - - 'Девять - Private Sub IfElseStatement() - Console.Title = "Выражения If/Else | Выучи Х за Y минут" - 'Иногда важно рассмотреть более двух альтернатив. - 'Иногда некоторые из них лучше других. - 'Когда это произойдет, нам потребуется более одного утверждения «if» (если). - 'Оператор «if» подобен торговому автомату. - 'В котором пользователь пишет код (A1, A2, A3 и т.д.), чтобы выбрать элементы. - 'Все варианты могут быть объединены в одном утверждении «if». - - Dim selection As String 'Объявить переменную для выбора - Console.WriteLine("Пожалуйста, выберите продукт из нашего прекрасного торгового автомата.") - Console.WriteLine("A1. для 7Up") - Console.WriteLine("A2. для Fanta") - Console.WriteLine("A3. для Dr. Pepper") - Console.WriteLine("A4. для Diet Coke") - - selection = Console.ReadLine() 'Сохранить выбор пользователя - If selection = "A1" Then - Console.WriteLine("7up") - ElseIf selection = "A2" Then - Console.WriteLine("Fanta") - ElseIf selection = "A3" Then - Console.WriteLine("Dr. Pepper") - ElseIf selection = "A4" Then - Console.WriteLine("Diet Coke") - Else - Console.WriteLine("Извините, у меня нет " + selection) - End If - Console.ReadLine() - - End Sub - -End Module -``` diff --git a/ru-ru/visualbasic-ru.html.markdown b/ru-ru/visualbasic-ru.html.markdown new file mode 100644 index 00000000..e9934822 --- /dev/null +++ b/ru-ru/visualbasic-ru.html.markdown @@ -0,0 +1,283 @@ +--- +language: Visual Basic +contributors: + - ["Brian Martin", "http://brianmartin.biz"] +translators: + - ["satory-ra", "https://github.com/satory-ra"] +filename: learnvisualbasic-ru.vb +lang: ru-ru +--- + +```vbnet +Module Module1 + + Sub Main() + 'Краткий обзор консольных приложений Visual Basic перед более + 'глубоким изучением. + 'Апостроф начинает строку комментария. + 'Чтобы изучить это руководство в компиляторе Visual Basic, + 'я создал систему навигации. + 'Эта система будет объяснена при прохождении этого урока. + 'Постепенно вы всё поймете. + Console.Title = ("Выучи Х за Y минут") + Console.WriteLine("НАВИГАЦИЯ") 'Display + Console.WriteLine("") + Console.ForegroundColor = ConsoleColor.Green + Console.WriteLine("1. Вывод данных") + Console.WriteLine("2. Ввод данных") + Console.WriteLine("3. Расчёт целых чисел") + Console.WriteLine("4. Расчёт десятичных дробей") + Console.WriteLine("5. Калькулятор") + Console.WriteLine("6. Использование циклов Do While") + Console.WriteLine("7. Использование циклов For") + Console.WriteLine("8. Условные выражения") + Console.WriteLine("9. Выберите напиток") + Console.WriteLine("50. О приложении") + Console.WriteLine("Выберите номер из списка") + Dim selection As String = Console.ReadLine + '«Case» в операторе Select не является обязательным. + 'Например, "Select selection" вместо "Select Case selection" + 'также будет работать. + Select Case selection + Case "1" 'Вывод данных + Console.Clear() 'Очищает окно консоли + HelloWorldOutput() 'Открывает приватную подпрограмму. + Case "2" 'Ввод данных + Console.Clear() + HelloWorldInput() + Case "3" 'Расчёт целых чисел + Console.Clear() + CalculatingWholeNumbers() + Case "4" 'Расчёт десятичных дробей + Console.Clear() + CalculatingDecimalNumbers() + Case "5" 'Калькулятор + Console.Clear() + WorkingCalculator() + Case "6" 'Использование циклов Do While + Console.Clear() + UsingDoWhileLoops() + Case "7" 'Использование циклов For + Console.Clear() + UsingForLoops() + Case "8" 'Условные выражения + Console.Clear() + ConditionalStatement() + Case "9" 'Выражения If/Else + Console.Clear() + IfElseStatement() 'Выберите напиток + Case "50" 'Окно сообщения «О приложении» + Console.Clear() + Console.Title = ("Выучи Х за Y минут :: О приложении") + MsgBox("Это руководство от Брайана Мартина (@BrianMartinn") + Console.Clear() + Main() + Console.ReadLine() + + End Select + End Sub + + 'Один - Я использую эти цифры для того, чтобы было проще + 'соотносить код с системой навигации. + + 'Мы используем частные подпрограммы для разделения различных + 'разделов программы. + Private Sub HelloWorldOutput() + 'Название консольного приложения + Console.Title = "Вывод данных | Выучи Х за Y минут" + 'Используйте Console.Write ("") или Console.WriteLine ("") + 'для отображения результатов. + 'Затем следует Console.Read () или Console.Readline () + 'Console.ReadLine () показывает вывод в консоли. + Console.WriteLine("Hello World") + Console.ReadLine() + End Sub + + 'Два + Private Sub HelloWorldInput() + Console.Title = "Ввод данных | Выучи Х за Y минут" + 'Переменная + 'используется для хранения пользовательских данных. + 'Объявление переменных начинается с Dim и заканчиваются + 'As VariableType (тип переменной). + + 'В этом уроке мы хотим узнать ваше имя и заставить программу + 'реагировать на это. + Dim username As String + 'Мы используем тип «string», так как ваше имя - это текстовая переменная. + Console.WriteLine("Привет, как тебя зовут? ") 'Просит ввести имя. + username = Console.ReadLine() 'Сохраняет имя в переменной username. + Console.WriteLine("Пирвет, " + username) 'Выводит: «Привет, 'имя'» + Console.ReadLine() 'Отображает вышеуказанный вывод. + + 'Вышеуказанная программа спросит ваше имя и скажет вам привет. + 'Есть и другие типы переменных, такие как целые числа (Integer), + 'мы используем Integer для обработки целых чисел. + End Sub + + 'Три + Private Sub CalculatingWholeNumbers() + Console.Title = "Расчёт целых чисел | Выучи Х за Y минут" + Console.Write("Первое число: ") 'Введите первое целое число: 1, 2, 50, 104 и т.д. + Dim a As Integer = Console.ReadLine() + Console.Write("Второе число: ") 'Введите второе целое число. + Dim b As Integer = Console.ReadLine() + Dim c As Integer = a + b + Console.WriteLine(c) + Console.ReadLine() + 'Приведенная программа сумирует два целых числа + End Sub + + 'Четыре + Private Sub CalculatingDecimalNumbers() + Console.Title = "Расчёт десятичных дробей | Выучи Х за Y минут" + 'Мы также должны уметь обрабатывать десятичные дроби. + 'Просто измените тип переменной с Integer на Double. + + 'Введите число с плавающей точкой: 1.2, 2.4, 50.1, 104.9 и т.д. + Console.Write("Первое число: ") + Dim a As Double = Console.ReadLine + Console.Write("Второе число: ") 'Введите второе число с плавающей точкой. + Dim b As Double = Console.ReadLine + Dim c As Double = a + b + Console.WriteLine(c) + Console.ReadLine() + 'Приведенный выше код может сложить две десятичных дроби. + End Sub + + 'Пять + Private Sub WorkingCalculator() + Console.Title = "Калькулятор | Выучи Х за Y минут" + 'Но что, если вам нужен калькулятор, который может обрабатывать сложение, + 'вычитание, умножение и деление? + 'Просто скопируйте и вставьте приведенный код. + Console.Write("Первое число: ") + Dim a As Double = Console.ReadLine + Console.Write("Второе число: ") + Dim b As Double = Console.ReadLine + Dim c As Double = a + b + Dim d As Double = a * b + Dim e As Double = a - b + Dim f As Double = a / b + + 'С помощью следующего кода мы можем вывести результат сложения, + 'вычитания, умножения и деления, рассчитанный выше, на экран. + Console.Write(a.ToString() + " + " + b.ToString()) + 'Мы хотим, чтобы в начале ответа было 3 пробела, для этого + 'вы можете использовать метод String.PadLeft (3). + Console.WriteLine(" = " + c.ToString.PadLeft(3)) + Console.Write(a.ToString() + " * " + b.ToString()) + Console.WriteLine(" = " + d.ToString.PadLeft(3)) + Console.Write(a.ToString() + " - " + b.ToString()) + Console.WriteLine(" = " + e.ToString.PadLeft(3)) + Console.Write(a.ToString() + " / " + b.ToString()) + Console.WriteLine(" = " + f.ToString.PadLeft(3)) + Console.ReadLine() + + End Sub + + 'Шесть + Private Sub UsingDoWhileLoops() + 'Код такой же, как и в предидущей подпрограмме + 'На этот раз мы спрашиваем, хочет ли пользователь продолжить (да или нет?) + 'Мы будем использовать цикл Do While, потому что не знаем, + 'понадобиться ли пользователю калькулятор болше одного раза. + Console.Title = "Использование циклов Do While | Выучи Х за Y минут" + Dim answer As String + 'Мы используем тип переменной "String", так как её значение текст. + Do 'Мы начаем программу с + Console.Write("Первое число: ") + Dim a As Double = Console.ReadLine + Console.Write("Второе число: ") + Dim b As Double = Console.ReadLine + Dim c As Double = a + b + Dim d As Double = a * b + Dim e As Double = a - b + Dim f As Double = a / b + + Console.Write(a.ToString() + " + " + b.ToString()) + Console.WriteLine(" = " + c.ToString.PadLeft(3)) + Console.Write(a.ToString() + " * " + b.ToString()) + Console.WriteLine(" = " + d.ToString.PadLeft(3)) + Console.Write(a.ToString() + " - " + b.ToString()) + Console.WriteLine(" = " + e.ToString.PadLeft(3)) + Console.Write(a.ToString() + " / " + b.ToString()) + Console.WriteLine(" = " + f.ToString.PadLeft(3)) + Console.ReadLine() + 'Спросите пользователя, хочет ли он продолжить, + 'в ответе учитывается регистр букв. + Console.Write("Желаете ли вы продолжить? (да / нет)") + 'Программа берет значение и записывает в переменную answer. + answer = Console.ReadLine() + 'Когда пользователь вводит «да», программа переходит к Do и снова запускается. + Loop While answer = "yes" + + End Sub + + 'Семь + Private Sub UsingForLoops() + 'Иногда программу нужно запускать только один раз. + 'В этой программе мы осуществим обратный отсчет от 10. + + Console.Title = "Использование циклов For | Выучи Х за Y минут" + 'Объявите переменные и Step (размер шага, то есть скорость уменьшения, + 'например, -1, -2, -3 и т.д.). + For i As Integer = 10 To 0 Step -1 + Console.WriteLine(i.ToString) 'Показывает значение счетчика. + Next i 'Рассчитать новое значение i. + Console.WriteLine("Поехали") + Console.ReadLine() + End Sub + + 'Восемь + Private Sub ConditionalStatement() + Console.Title = "Условные выражения | Выучи Х за Y минут" + Dim userName As String + Console.WriteLine("Привет, как тебя зовут? ") 'Спросите имя пользователя. + userName = Console.ReadLine() 'Записать имя в переменную userName. + If userName = "Адам" Then + Console.WriteLine("Привет, Адам") + Console.WriteLine("Спасибо за создание этого полезного сайта") + Console.ReadLine() + Else + Console.WriteLine("Привет " + userName) + Console.WriteLine("Вы заглянули на сайт www.learnxinyminutes.com") + Console.ReadLine() 'Программа останавливается и выводит вышеуказанный текст. + End If + End Sub + + 'Девять + Private Sub IfElseStatement() + Console.Title = "Выражения If/Else | Выучи Х за Y минут" + 'Иногда важно рассмотреть более двух альтернатив. + 'Иногда некоторые из них лучше других. + 'Когда это произойдет, нам потребуется более одного утверждения «if» (если). + 'Оператор «if» подобен торговому автомату. + 'В котором пользователь пишет код (A1, A2, A3 и т.д.), чтобы выбрать элементы. + 'Все варианты могут быть объединены в одном утверждении «if». + + Dim selection As String 'Объявить переменную для выбора + Console.WriteLine("Пожалуйста, выберите продукт из нашего прекрасного торгового автомата.") + Console.WriteLine("A1. для 7Up") + Console.WriteLine("A2. для Fanta") + Console.WriteLine("A3. для Dr. Pepper") + Console.WriteLine("A4. для Diet Coke") + + selection = Console.ReadLine() 'Сохранить выбор пользователя + If selection = "A1" Then + Console.WriteLine("7up") + ElseIf selection = "A2" Then + Console.WriteLine("Fanta") + ElseIf selection = "A3" Then + Console.WriteLine("Dr. Pepper") + ElseIf selection = "A4" Then + Console.WriteLine("Diet Coke") + Else + Console.WriteLine("Извините, у меня нет " + selection) + End If + Console.ReadLine() + + End Sub + +End Module +``` diff --git a/zh-cn/clojure-macro-cn.html.markdown b/zh-cn/clojure-macro-cn.html.markdown deleted file mode 100644 index 85b966e9..00000000 --- a/zh-cn/clojure-macro-cn.html.markdown +++ /dev/null @@ -1,150 +0,0 @@ ---- -language: "clojure macros" -filename: learnclojuremacros-zh.clj -contributors: - - ["Adam Bard", "http://adambard.com/"] -translators: - - ["Jakukyo Friel", "http://weakish.github.io"] -lang: zh-cn ---- - -和所有Lisp一样,Clojure内在的[同构性](https://en.wikipedia.org/wiki/Homoiconic)使得你可以穷尽语言的特性,编写生成代码的子过程——“宏”。宏是一种按需调制语言的强大方式。 - -小心!可以用函数完成的事用宏去实现可不是什么好事。你应该仅在需要控制参数是否或者何时eval的时候使用宏。 - -你应该熟悉Clojure.确保你了解[Y分钟学Clojure](http://learnxinyminutes.com/docs/zh-cn/clojure-cn/)中的所有内容。 - -```clojure -;; 使用defmacro定义宏。宏应该输出一个可以作为clojure代码演算的列表。 -;; -;; 以下宏的效果和直接写(reverse "Hello World")一致。 - -(defmacro my-first-macro [] - (list reverse "Hello World")) - -;; 使用macroexpand或macroexpand-1查看宏的结果。 -;; -;; 注意,调用需要引用。 -(macroexpand '(my-first-macro)) -;; -> (# "Hello World") - -;; 你可以直接eval macroexpand的结果 -(eval (macroexpand '(my-first-macro))) -; -> (\d \l \o \r \W \space \o \l \l \e \H) - -;; 不过一般使用以下形式,更简短,更像函数: -(my-first-macro) ; -> (\d \l \o \r \W \space \o \l \l \e \H) - -;; 创建宏的时候可以使用更简短的引用形式来创建列表 -(defmacro my-first-quoted-macro [] - '(reverse "Hello World")) - -(macroexpand '(my-first-quoted-macro)) -;; -> (reverse "Hello World") -;; 注意reverse不再是一个函数对象,而是一个符号。 - -;; 宏可以传入参数。 -(defmacro inc2 [arg] - (list + 2 arg)) - -(inc2 2) ; -> 4 - -;; 不过,如果你尝试配合使用引用列表,会导致错误, -;; 因为参数也会被引用。 -;; 为了避免这个问题,clojure提供了引用宏的另一种方式:` -;; 在`之内,你可以使用~获得外圈作用域的变量。 -(defmacro inc2-quoted [arg] - `(+ 2 ~arg)) - -(inc2-quoted 2) - -;; 你可以使用通常的析构参数。用~@展开列表中的变量。 -(defmacro unless [arg & body] - `(if (not ~arg) - (do ~@body))) ; 别忘了 do! - -(macroexpand '(unless true (reverse "Hello World"))) - -;; -> -;; (if (clojure.core/not true) (do (reverse "Hello World"))) - -;; 当第一个参数为假时,(unless)会演算、返回主体。 -;; 否则返回nil。 - -(unless true "Hello") ; -> nil -(unless false "Hello") ; -> "Hello" - -;; 需要小心,宏会搞乱你的变量 -(defmacro define-x [] - '(do - (def x 2) - (list x))) - -(def x 4) -(define-x) ; -> (2) -(list x) ; -> (2) - -;; 使用gensym来获得独有的标识符 -(gensym 'x) ; -> x1281 (or some such thing) - -(defmacro define-x-safely [] - (let [sym (gensym 'x)] - `(do - (def ~sym 2) - (list ~sym)))) - -(def x 4) -(define-x-safely) ; -> (2) -(list x) ; -> (4) - -;; 你可以在 ` 中使用 # 为每个符号自动生成gensym -(defmacro define-x-hygenically [] - `(do - (def x# 2) - (list x#))) - -(def x 4) -(define-x-hygenically) ; -> (2) -(list x) ; -> (4) - -;; 通常会配合宏使用帮助函数。 -;; 让我们创建一些帮助函数来支持(无聊的)算术语法: - -(declare inline-2-helper) -(defn clean-arg [arg] - (if (seq? arg) - (inline-2-helper arg) - arg)) - -(defn apply-arg - "Given args [x (+ y)], return (+ x y)" - [val [op arg]] - (list op val (clean-arg arg))) - -(defn inline-2-helper - [[arg1 & ops-and-args]] - (let [ops (partition 2 ops-and-args)] - (reduce apply-arg (clean-arg arg1) ops))) - -;; 在创建宏前,我们可以先测试 -(inline-2-helper '(a + (b - 2) - (c * 5))) ; -> (- (+ a (- b 2)) (* c 5)) - -; 然而,如果我们希望它在编译期执行,就需要创建宏 -(defmacro inline-2 [form] - (inline-2-helper form)) - -(macroexpand '(inline-2 (1 + (3 / 2) - (1 / 2) + 1))) -; -> (+ (- (+ 1 (/ 3 2)) (/ 1 2)) 1) - -(inline-2 (1 + (3 / 2) - (1 / 2) + 1)) -; -> 3 (事实上,结果是3N, 因为数字被转化为带/的有理分数) -``` - -## 扩展阅读 - -[Clojure for the Brave and True](http://www.braveclojure.com/) -[系列的编写宏](http://www.braveclojure.com/writing-macros/) - -[官方文档](http://clojure.org/macros) - -[何时使用宏?](https://lispcast.com/when-to-use-a-macro/) diff --git a/zh-cn/clojure-macros-cn.html.markdown b/zh-cn/clojure-macros-cn.html.markdown new file mode 100644 index 00000000..85b966e9 --- /dev/null +++ b/zh-cn/clojure-macros-cn.html.markdown @@ -0,0 +1,150 @@ +--- +language: "clojure macros" +filename: learnclojuremacros-zh.clj +contributors: + - ["Adam Bard", "http://adambard.com/"] +translators: + - ["Jakukyo Friel", "http://weakish.github.io"] +lang: zh-cn +--- + +和所有Lisp一样,Clojure内在的[同构性](https://en.wikipedia.org/wiki/Homoiconic)使得你可以穷尽语言的特性,编写生成代码的子过程——“宏”。宏是一种按需调制语言的强大方式。 + +小心!可以用函数完成的事用宏去实现可不是什么好事。你应该仅在需要控制参数是否或者何时eval的时候使用宏。 + +你应该熟悉Clojure.确保你了解[Y分钟学Clojure](http://learnxinyminutes.com/docs/zh-cn/clojure-cn/)中的所有内容。 + +```clojure +;; 使用defmacro定义宏。宏应该输出一个可以作为clojure代码演算的列表。 +;; +;; 以下宏的效果和直接写(reverse "Hello World")一致。 + +(defmacro my-first-macro [] + (list reverse "Hello World")) + +;; 使用macroexpand或macroexpand-1查看宏的结果。 +;; +;; 注意,调用需要引用。 +(macroexpand '(my-first-macro)) +;; -> (# "Hello World") + +;; 你可以直接eval macroexpand的结果 +(eval (macroexpand '(my-first-macro))) +; -> (\d \l \o \r \W \space \o \l \l \e \H) + +;; 不过一般使用以下形式,更简短,更像函数: +(my-first-macro) ; -> (\d \l \o \r \W \space \o \l \l \e \H) + +;; 创建宏的时候可以使用更简短的引用形式来创建列表 +(defmacro my-first-quoted-macro [] + '(reverse "Hello World")) + +(macroexpand '(my-first-quoted-macro)) +;; -> (reverse "Hello World") +;; 注意reverse不再是一个函数对象,而是一个符号。 + +;; 宏可以传入参数。 +(defmacro inc2 [arg] + (list + 2 arg)) + +(inc2 2) ; -> 4 + +;; 不过,如果你尝试配合使用引用列表,会导致错误, +;; 因为参数也会被引用。 +;; 为了避免这个问题,clojure提供了引用宏的另一种方式:` +;; 在`之内,你可以使用~获得外圈作用域的变量。 +(defmacro inc2-quoted [arg] + `(+ 2 ~arg)) + +(inc2-quoted 2) + +;; 你可以使用通常的析构参数。用~@展开列表中的变量。 +(defmacro unless [arg & body] + `(if (not ~arg) + (do ~@body))) ; 别忘了 do! + +(macroexpand '(unless true (reverse "Hello World"))) + +;; -> +;; (if (clojure.core/not true) (do (reverse "Hello World"))) + +;; 当第一个参数为假时,(unless)会演算、返回主体。 +;; 否则返回nil。 + +(unless true "Hello") ; -> nil +(unless false "Hello") ; -> "Hello" + +;; 需要小心,宏会搞乱你的变量 +(defmacro define-x [] + '(do + (def x 2) + (list x))) + +(def x 4) +(define-x) ; -> (2) +(list x) ; -> (2) + +;; 使用gensym来获得独有的标识符 +(gensym 'x) ; -> x1281 (or some such thing) + +(defmacro define-x-safely [] + (let [sym (gensym 'x)] + `(do + (def ~sym 2) + (list ~sym)))) + +(def x 4) +(define-x-safely) ; -> (2) +(list x) ; -> (4) + +;; 你可以在 ` 中使用 # 为每个符号自动生成gensym +(defmacro define-x-hygenically [] + `(do + (def x# 2) + (list x#))) + +(def x 4) +(define-x-hygenically) ; -> (2) +(list x) ; -> (4) + +;; 通常会配合宏使用帮助函数。 +;; 让我们创建一些帮助函数来支持(无聊的)算术语法: + +(declare inline-2-helper) +(defn clean-arg [arg] + (if (seq? arg) + (inline-2-helper arg) + arg)) + +(defn apply-arg + "Given args [x (+ y)], return (+ x y)" + [val [op arg]] + (list op val (clean-arg arg))) + +(defn inline-2-helper + [[arg1 & ops-and-args]] + (let [ops (partition 2 ops-and-args)] + (reduce apply-arg (clean-arg arg1) ops))) + +;; 在创建宏前,我们可以先测试 +(inline-2-helper '(a + (b - 2) - (c * 5))) ; -> (- (+ a (- b 2)) (* c 5)) + +; 然而,如果我们希望它在编译期执行,就需要创建宏 +(defmacro inline-2 [form] + (inline-2-helper form)) + +(macroexpand '(inline-2 (1 + (3 / 2) - (1 / 2) + 1))) +; -> (+ (- (+ 1 (/ 3 2)) (/ 1 2)) 1) + +(inline-2 (1 + (3 / 2) - (1 / 2) + 1)) +; -> 3 (事实上,结果是3N, 因为数字被转化为带/的有理分数) +``` + +## 扩展阅读 + +[Clojure for the Brave and True](http://www.braveclojure.com/) +[系列的编写宏](http://www.braveclojure.com/writing-macros/) + +[官方文档](http://clojure.org/macros) + +[何时使用宏?](https://lispcast.com/when-to-use-a-macro/) -- cgit v1.2.3