]]> ]]>

Seed7 2007-06-07

Версия реализации Seed7 языка программирования Seed7

Изменения относительно предыдущей версии:

  • В FAQ добавлено разъяснение множественной диспетчеризации
  • исправлена ошибка в функции str для типа complex
  • интерпретатор теперь поддерживает startsWith, endsWith, array_min_position, heapstat, и @:= (для ‘ref_lists’)
  • улучшена поддержка компилятором drw_cpy, ref_trace, arr_head, arr_tail, arr_idx, varfunc, wintype, литералов массивов и динамических функций
  • компилятор теперь сообщает о необработанных исключениях
  • компилятор изменен для поддержки функцией destr параметра NULL
  • компилятор теперь успешно компилирует примеры snake.sd7 и toutf8.sd7

Примеры:

Факториал - Seed7 (12):

Используется рекурсивное определение факториала. Для хранения значений факториала используется тип 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 (13):

Используется встроенная функция !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 (14):

$ include "seed7_05.s7i";

const proc: main is func
begin
    writeln("Hello, World!");
end func;

Комментарии

]]>

blog comments powered by Disqus

]]>

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