]]> ]]>
Править | Обсудить | История

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

]]>

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