]]> ]]>

Io

Реализация языка программирования Io

Авторская реализация языка Io. Написана на C.

Примеры:

Hello, World!:

Пример для версий Io-2008-01-07

Эта команда создает символ “Hello, World!” (символ — неизменная последовательность, наподобие строки в Java) и отправляет ему сообщение println (эквивалент вызову метода println в других языках).

"Hello, World!" println

Числа Фибоначчи:

Пример для версий Io-2008-01-07

В этом примере используется итерачивное вычисление чисел Фибоначчи. В цикле for пропущен четвертый аргумент, задающий шаг цикла — по умолчанию он равен 1.

N0 := 0;
N1 := 1;
for(i,1,16,
   N2 := N1+N0;
   N0 := N1;
   N1 := N2;
   N0 print;
   ", " print;
);
"..." println; 

Числа Фибоначчи:

Пример для версий Io-2008-01-07

В этом примере для вычисления чисел Фибоначчи используется формула Бине. Математические функции также вызываются посредством передачи сообщения объекту-числу.

g := (5 sqrt + 1) / 2;
for(i,1,16,
   N := ((g pow(i)) - ((1-g) pow(i))) / (5 sqrt);
   N round print;
   ", " print;
);
"..." println; 

Факториал:

Пример для версий Io-2008-01-07

Используется итеративный метод вычисление факториала. Вывод программы для больших чисел выглядит следующим образом:

12! = 479001600
13! = 6.227021e+009
14! = 8.717829e+010
15! = 1.307674e+012
16! = 2.092279e+013
F := 1;
for(N,0,16,
   N print;
   "! = " print;
   F println;
   F := F * (N+1);
);

Квадратное уравнение:

Пример для версий Io-2008-01-07

Для вывода строки, состоящей из нескольких элементов, используется следующий прием: из этих элементов создается список (команда list), затем он конкатенируется в одну строку (join), которая и выводится на печать.

A := File standardInput readLine asNumber;
if(A==0, 
   "Not a quadratic equation." println;
   return;
);
B := File standardInput readLine asNumber;
C := File standardInput readLine asNumber;
D := B*B-4*A*C;
A2 := 2*A;
if(D==0,
   list("x = ", (-B/A2) asString) println;
   return;
);
sqrtD := D abs sqrt;
if(D>0,
   list("x1 = ", ((-B+sqrtD)/A2) asString) join println;
   list("x2 = ", ((-B-sqrtD)/A2) asString) join println,
   list("x1 = (", (-B/A2) asString, ", ", (sqrtD/A2) asString, ")") join println;
   list("x2 = (", (-B/A2) asString, ", ", (-sqrtD/A2) asString, ")") join println;
);

CamelCase:

Пример для версий Io-2008-01-07

В примере показана стандартная посимвольная обработка строки. Отметим, что метод at(i) возвращает ASCII-код i-ого символа строки, а slice(i,i+1) — символ как строку длины 1. Для определения, является ли символ буквой, использован его ASCII-код, а для перевода в верхний регистр и вывода на печать — сам символ.

S := File standardInput readLine asLowercase;
lastSpace := 1;
for(i,0,(S size)-1,
   ascii := S at(i);
   letter := S slice(i,i+1);
   if(ascii>=97 and ascii<=122,
      if(lastSpace==1, letter := letter asUppercase);
      letter print;
      lastSpace := 0,
      lastSpace := 1;
   );
);

Комментарии

]]>

blog comments powered by Disqus

]]>

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