Seed7
- Дата создания:
- 2005
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .sd7 — исходные тексты; .s7i — библиотеки
- Реализации и версии (свернуть все | развернуть все):
Seed7 — язык программирования общего назначения, разработанный Томасом Мертесом (Thomas Mertes).
Seed7 является более высокоуровневым языком по сравнению с такими языками, как Ada, C/C++ и Java. Интерпретатор языка Seed7 и примеры программ являются свободным программным обеспечением и распространяются на условиях лицензии GNU GPL (runtime-библиотека под лицензией GNU LGPL). Также идет разработка open-source компилятора Seed7.
В Seed7 можно легко объявлять новые управляющие структуры и операторы. Фактически, ряд элементов языка вынесен в библиотеки, и новые элементы определяются совершенно свободно. Параметрами и возвращаемыми значениями функций могут быть типы данных. Язык поддерживает объектно-ориентированное программирование.
Язык Seed7 включает в себя концепции, взятые из различных языков программирования, однако нельзя сказать, что он является прямым потомком какого-либо из них.
Ключевые возможности Seed7:
- определяемые пользователем управляющие структуры и операторы;
- типы являются объектами первого класса;
- предопределенные конструкции, такие как массивы и циклы, реализованы средствами языка;
- поддержка объектно-ориентированного программирования со множественной диспетчеризацией;
- строгая типизация;
- обработка исключений;
- перегрузка процедур/функций/операторов/управляющих структур;
- множество предопределенных типов данных, таких как массивы переменного размера, хэши, наборы битов, структуры, цвет, время, продолжительность и т.д.
- кроссплатформенность: интерпретатор работает под Linux, различными вариантами Unix-систем, Windows и Mac OS X. Более того, язык предоставляет универсальные интерфейсы для ряда платформенно-зависимых объектов (файловых функций, сокетов и т.д.)
Ссылки:
Примеры:
Факториал:
Пример для версий Seed7 2007-06-07, Seed7 2007-06-24, Seed7 2012-01-01Используется рекурсивное определение факториала. Для хранения значений факториала используется тип bigInteger
, поэтому переполнения не происходит.
$ include "seed7_05.s7i";
include "bigint.s7i";
const func bigInteger: factorial (in var bigInteger: n) is func
result
var bigInteger: result is 1_;
begin
if n = 0_ then
result := 1_;
else
result := n * factorial(n - 1_);
end if;
end func;
const proc: main is func
local
var integer: n is 0;
begin
for n range 0 to 16 do
write(n);
write("! = ");
write(factorial(bigInteger conv n));
writeln;
end for;
end func;
Факториал:
Пример для версий Seed7 2007-06-07, Seed7 2007-06-24, Seed7 2012-01-01Используется встроенная функция !n, определенная только для типа данных integer
. 13! больше максимально возможного значения этого типа, и попытка его вычисления вызывает арифметическое переполнение. В результате вывод программы имеет следующий вид:
0! = 1
1! = 1
2! = 2
...
11! = 39916800
12! = 479001600
13! =
*** Uncaught EXCEPTION NUMERIC_ERROR raised with
{! integer <80ba990>: <SYMBOLOBJECT> 0 }
{! (in integer <80ba990> param) } at factorial-builtin.sd7(10)
main no POSINFO
$ include "seed7_05.s7i";
const proc: main is func
local
var integer: n is 0;
begin
for n range 0 to 16 do
writeln(n <& "! = " <& !n);
end for;
end func;
Hello, World!:
Пример для версий Seed7 2007-06-07, Seed7 2012-01-01$ include "seed7_05.s7i";
const proc: main is func
begin
writeln("Hello, World!");
end func;
Числа Фибоначчи:
Пример для версий Seed7 2012-01-01Используется рекурсивное определение чисел Фибоначчи.
$ include "seed7_05.s7i";
const func integer: fibonacci (in var integer: n) is func
result
var integer: result is 1;
begin
if n < 2 then
result := 1;
else
result := fibonacci(n - 1) + fibonacci(n - 2);
end if;
end func;
const proc: main is func
local
var integer: n is 0;
begin
for n range 0 to 15 do
write(fibonacci(n) <& ", ");
end for;
writeln("...");
end func;
CamelCase:
Пример для версий Seed7 2012-01-01В примере используется посимвольная обработка введенной строки.
$ include "seed7_05.s7i";
const proc: main is func
local
var string: text is "";
var string: camel_case is "";
var char: ch is ' ';
var boolean: was_space is TRUE;
begin
readln(text);
text := lower(text);
for ch range text do
if ch in {'a' .. 'z'} then
if was_space then
ch := upper(ch);
end if;
camel_case &:= ch;
was_space := FALSE;
else
was_space := TRUE;
end if;
end for;
writeln(camel_case);
end func;
Квадратное уравнение:
Пример для версий Seed7 2012-01-01$ include "seed7_05.s7i";
include "float.s7i";
include "math.s7i";
const proc: main is func
local
var float: a is 0.0;
var float: b is 0.0;
var float: c is 0.0;
var float: d is 0.0;
begin
readln(a);
if a = 0.0 then
writeln("Not a quadratic equation.");
else
readln(b);
readln(c);
d := b ** 2 - 4.0 * a * c;
if d = 0.0 then
writeln("x = " <& (-b / 2.0 / a));
else
if d > 0.0 then
writeln("x1 = " <& ((-b + sqrt(d)) / 2.0 / a));
writeln("x2 = " <& ((-b - sqrt(d)) / 2.0 / a));
else
writeln("x1 = (" <& (-b / 2.0 / a) <& "," <& (sqrt(-d) / 2.0 / a) <& ")");
writeln("x2 = (" <& (-b / 2.0 / a) <& "," <& (-sqrt(-d) / 2.0 / a) <& ")");
end if;
end if;
end if;
end func;
Комментарии
]]>blog comments powered by Disqus
]]>