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

REXX

Дата создания:
1979
Парадигма:
Типизация:
Принятые расширения файлов:
.rex
Реализации и версии (свернуть все | развернуть все):
Язык программирования

REXX — интерпретируемый язык программирования, изначально предназначенный для создания макросов и использования в качестве скриптового языка. Он был разработан в IBM для проприетарных операционных систем (z/VM, z/OS, z/VSE, OS/2, AIX).

Целью создания REXX была легкость использования, а не легкость реализации. Он снабжен обширной библиотекой мощных и удобных функций для работы со строками, автоматическоим преобразованием типов, интуитивным синтаксисом конкатенации строк, числами произвольной точности, ассоциативными массивами и небольшим набором команд с контекстно-зависимыми ключевыми словами, предназначенными для максимальной гибкости и быстрой разработки.

В настоящее время доступны как минимум две открытые реализации, Open Object REXX и Regina, и минимум одна проприетарная, uni-REXX. Для некоторых реализаций существуют не только интерпретаторы, но и компиляторы.

Элементы синтаксиса:

Комментарии, которые могут быть вложенными /* ... */
Регулярное выражение идентификатора переменной [A-Za-z?_][A-Za-z?_0-9]*
Присваивание значения переменной varname = value
Группировка выражений ( ... )
Блок do ... end
Равенство =
Неравенство <>, \=
Тождественное равенство ==
Тождественное неравенство \==
Сравнение <, >, <=, >=
Определение функции funcname: procedure
Вызов функции y = f(x)
Вызов функции без параметров y = f()
Последовательность ;
Если - то if CONDITION then STATEMENT
Если - то - иначе if CONDITION then STATEMENT; else STATEMENT
Бесконечный цикл do forever ... end
Цикл с предусловием do while CONDITION ... end
Цикл с постусловием do until CONDITION ... end
Цикл for - next для диапазона целых чисел с инкрементом на 1 do i = 1 to j ... end
Цикл for - next для диапазона целых чисел с декрементом на 1 do i = 1 to j by -1 ... end

Логотип Rexx Language Association
Логотип Rexx Language Association

Примеры:

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

]]>

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