]]> ]]>

Lua

Реализация языка программирования Lua

Стандартная реализация Lua.

Примеры:

Факториал:

Пример для версий Lua 5.0, Lua 5.1

Используется рекурсивное определение факториала.

function factorial(n)
    if (n == 0) then
        return 1
    else
        return n * factorial(n - 1)
    end
end

for n = 0, 16 do
    io.write(n, "! = ", factorial(n), "\n")
end

Hello, World!:

Пример для версий Lua 5.0
print("Hello, World!")

Числа Фибоначчи:

Пример для версий Lua 5.0

Используется рекурсивное определение чисел Фибоначчи.

function fibonacci(n)
    if n<3 then
        return 1
    else
        return fibonacci(n-1) + fibonacci(n-2)
    end
end

for n = 1, 16 do
    io.write(fibonacci(n), ", ")
end
io.write("...\n")

Числа Фибоначчи:

Пример для версий Lua 5.0

Вычисленные числа хранятся в ассоциативном массиве fib и извлекаются из него для вычисления следующих. По умолчанию ассоциативные массивы в Lua используют целочисленные ключи, начинающиеся с 1, поэтому команда fib = {1, 1} создает массив с индексами элементов 1 и 2.

fib = {1, 1}
for n = 3, 16 do
    fib[n] = fib[n-1] + fib[n-2]
end
for n = 1, 16 do
    io.write(fib[n], ", ")
end
io.write("...\n")

Квадратное уравнение:

Пример для версий Lua 5.1

*n указывает на то, что читается число.

local A = io.read('*n')
if A==0 then 
    io.write('Not a quadratic equation.')
    return
end
local B = io.read('*n')
local C = io.read('*n')
D = B*B-4*A*C
if D==0 then
    io.write('x = ', -B/2/A)
else if D>0 then
        io.write('x1 = ', (-B+math.sqrt(D))/2/A, '\nx2 = ', (-B-math.sqrt(D))/2/A)
     else
        io.write('x1 = (', -B/2/A, ',', math.sqrt(-D)/2/A, ')\nx2 = (', -B/2/A, ',', -math.sqrt(-D)/2/A, ')\n')
     end
end

CamelCase:

Пример для версий Lua 5.1

Создатели Lua ставили себе за цель создание максимально легкого языка, поэтому вместо полноценных регулярных выражений язык поддерживает pattern matching. Впрочем, это позволяет реализовать большинство функций регулярных выражений без лишних трудозатрат.

В данном примере первая строка читает строку для преобразования; функция io.read() без аргумента читает строчный тип. Вторая строка изменяет регистр каждой последовательности букв к нужному; паттерн %a соответствует букве в любом регистре, и для каждого соответствия паттерну вызывается анонимная функция, выполняющая преобразование. Третья строка убирает все последовательности не-букв, и, наконец, четвертая выводит результат на печать.

text = io.read()
text = text.gsub(text, '[%a]+', function(s) 
       return string.upper(string.sub(s,1,1)) .. string.lower(string.sub(s,2)) 
end)
text = text.gsub(text, '[%A]+', '')
io.write(text)

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам