Seed7 2007-06-24
Версия реализации Seed7 языка программирования Seed7Изменения относительно предыдущей версии:
- добавлена сокет-библиотека (socket.s7i)
- добавлены два примера для проверки функциональности сокет-библиотеки (tst_srv.sd7 и tst_cli.sd7)
-
добавлена функция
popen
-
улучшен компилятор для поддержки хэш-таблиц с числами с плавающей запятой,
for
-циклов для хэш-таблиц, новой сокет-библиотеки - компилятор теперь успешно компилирует примеры bas.sd7 и wordcnt.sd7
- улучшен пример wator.sd7
- улучшено управление динамической памятью и статистика по ней
-
изменены прототипы нескольких функций для использования
const
-типов
Ссылки:
Примеры:
Факториал - 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;
Комментарии
]]>blog comments powered by Disqus
]]>