]]> ]]>

Regina

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

Regina — один из современных интерпретаторов REXX, портированный на большинство Unix-платформ и ряд других. Создан Anders Christensen, в настоящее время поддерживается Mark Hessling. Создание и развитие этого интерпретатора преследуют две цели — добиться совместимости со стандартом ANSI (реализовано начиная с версии Regina 3.1) и работать на максимально возможном количестве платформ.

Примеры:

Hello, World!:

Пример для версий Regina 3.3
say 'Hello, World!'

Факториал:

Пример для версий Regina 3.3

В примере используется рекурсивное определение факториала.

REXX позволяет установить произвольную точность вычислений. В данном случае 14 знаков необходимо для того, чтобы все факториалы выводились как целые числа. Без первой строки факториалы, начиная с 13!, выводятся как числа с плавающей точкой.

Конкатенация строк может выполняться оператором || или в неявном виде при последовательном перечислении величин и констант. Если величины разделены пробелами, эти пробелы добавляются и в итоговую строку.

Слово procedure в определении функции необязательно; оно указывает на то, что переменные подпрограммы локальны; в противном случае они будут глобальными в пределах программы.

  numeric digits 14

  do n = 0 to 16
    say n"! = "factorial(n)
  end
exit

factorial: procedure
  parse arg n .
  if n = 0 then
    n = 1
  else
    n = n * factorial(n - 1)
  return n

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

Пример для версий Regina 3.3

В этом примере используется рекурсивное определение чисел Фибоначчи.

  numbers = ''
  do n = 1 to 16
    numbers = numbers||fibonacci(n)", "
  end
  say numbers"..."
exit

fibonacci: procedure
  parse arg n .
  if n < 3 then
    n = 1
  else
    n = fibonacci(n-1) + fibonacci(n-2)
  return n

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

Пример для версий Regina 3.3

В этом примере используется итеративное вычисление чисел Фибоначчи. Массивы реализованы как “корневые переменные”: обращение к элементам массива идет по их индексам fib.1 (или fib.first).

  fib.0 = 0
  fib.1 = 1
  output = fib.1||', '

  do f = 2 to 16
    e = f - 1; d = f - 2
    fib.f = fib.e + fib.d
    output = output||fib.f', '
  end

  say output"..."
exit

Комментарии

]]>

blog comments powered by Disqus

]]>

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