Nimrod
Реализация языка программирования NimrodАвторский компилятор языка, созданный в 2004 году. Изначально он был написан на Free Pascal и Python, но в 2008 году он перешел на самокомпиляцию. В настоящее время (и вплоть до Nimrod 1.0.0) компилятор нестабилен, и новые версии могут быть несовместимы с предыдущими.
Компилятор кроссплатформенный и легко портируется на новые платформы. Он компилирует код в C, C++ или Objective C. В стандартную поставку входят привязки к Python, Lua, TCL, MySQL и SQLite, а также ряда фреймворков. Nimrod распространяется под GNU GPL.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Nimrod 0.8.8echo "Hello, World!"
Факториал:
Пример для версий Nimrod 0.8.8Используется рекурсивное вычисление факториала.
proc factorial(n: int): int64 =
if n == 0:
result = 1
else:
result = n * factorial(n - 1)
for i in countup(0,16):
echo i, "! = ", factorial(i)
Факториал:
Пример для версий Nimrod 0.8.8Факториал вычисляется итеративно. Отметим, что тип int64
в определении переменной факториала пропустить нельзя, иначе ее тип будет выведен как int
, и переменная переполнится на 13!.
var f: int64 = 1
for i in countup(0,16):
echo i, "! = ", f
f = f * (i + 1)
Числа Фибоначчи:
Пример для версий Nimrod 0.8.8Используется итеративное вычисление чисел Фибоначчи. Одним ключевым словом var
можно объявить сразу несколько переменных, если эти объявления отформатированы отступами как блок. Тип переменной в объявлении можно не указывать только в том случае, если она инициализируется немедленно; Nimrod использует только локальный вывод типов, не глобальный.
for i in 1..16
— альтернативная форма записи цикла countup
. &
— оператор конкатенации строк, $
— преобразование числа в строку.
var
f1 = 1
f2 = 1
f3: int
res = ""
for i in 1..16:
res = res & $f1 & ", "
f3 = f1 + f2
f1 = f2
f2 = f3
echo res & "..."
Числа Фибоначчи:
Пример для версий Nimrod 0.8.8Используется формула Бине. Добавление эпсилона перед округлением необходимо для получения правильных целых значений, т.к. округление выполняется вниз.
from math import sqrt, pow, round
proc fibonacci(n: int): int =
var phi: float64 = (1.0 + sqrt(5.0)) / 2.0
return round((pow(phi, float64(n)) - pow(-phi, -float64(n))) / sqrt(5.0) + 0.0001)
var res = ""
for i in 1..16:
res = res & $fibonacci(i) & ", "
echo res & "..."
Квадратное уравнение:
Пример для версий Nimrod 0.8.8from math import sqrt
from strutils import parseFloat
var A = parseFloat(readLine(stdin))
if A == 0.0:
echo "Not a quadratic equation."
else:
var B = parseFloat(readLine(stdin))
var C = parseFloat(readLine(stdin))
var D = B * B - 4.0 * A * C
if D == 0.0:
echo "x = ", -0.5 * B / A
elif D > 0.0:
echo "x1 = ", -0.5 * (B - sqrt(D)) / A
echo "x2 = ", -0.5 * (B + sqrt(D)) / A
else:
echo "x1 = (", -0.5 * B / A, ", ", 0.5 * sqrt(-D) / A, ")"
echo "x2 = (", -0.5 * B / A, ", ", -0.5 * sqrt(-D) / A, ")"
CamelCase:
Пример для версий Nimrod 0.8.8Эта программа использует регулярные выражения. В Nimrod они реализованы при помощи библиотеки PRCE (Perl-Compatible Regular Expressions), написанной на C.
from strutils import toLower, capitalize, join
import re
var text = toLower(readLine(stdin))
var words = split(text, re"[^a-z]+")
echo join(words.each(capitalize))
Комментарии
]]>blog comments powered by Disqus
]]>