]]> ]]>

R

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

Авторский интерпретатор системы R.

Примеры:

Hello, World!:

Пример для версий R 2.10.1

R позволяет заключать строки как в одинарные кавычки, так и в двойные, хотя при выводе использует только двойные.

print("Hello, World!")

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

Пример для версий R 2.10.1

Используется рекурсивное вычисление чисел Фибоначчи. Функция создается как объект и присваивается переменной fib. Если функция return не вызывается в явном виде, функция возвращает значение последней выполненной команды.

Функция print.table выводит массив, полученный в результате применения функции fib к массиву чисел от 1 до 16, как таблицу, т.е. в одну строку. Использование функции print вывело бы элементы массива по одному на строку.

fib <- function(n) {
  if (n < 2)
    n
  else
    fib(n - 1) + fib(n - 2)
}

print.table(lapply(1:16, fib))

Факториал:

Пример для версий R 2.10.1

Используется итеративное вычисление факториала. Функция paste конкатенирует безымянные аргументы, именованный аргумент sep задает разделитель, использующийся при конкатенации (по умолчанию — пробел).

f <- 1
for (n in 0:16) {
  print(paste(n, "! = ", f, sep = ""))
  f <- f * (n + 1)
}

Факториал:

Пример для версий R 2.10.1

Используется встроенная функция prod, вычисляющая произведение всех элементов массива. Для n = 0 ответ был бы неправильным, т.к. массив 1:0 состоит из двух элементов — 1 и 0.

for (n in 1:16) {
  print(paste(n, "! = ", prod(1:n), sep = ""))
}

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

Пример для версий R 2.10.1

Основной средой работы с R является интерактивный интерпретатор, поэтому достаточно определить функцию, решающую уравнение, и вызывать ее с нужными коэффициентами. Используется встроенный тип complex.

quadratic <- function(a, b, c) {
  if (a == 0) {
    print("Not a quadratic equation.")
  } else {
    d <- b * b - 4 * a * c
    if (d == 0) {
      print(paste("x =", -b / 2 / a))
    } else
      if (d > 0) {
        print(paste("x =", (-b + sqrt(d) * c(1, -1)) / 2 / a))
      } else {
        print(paste("x =", (-b + sqrt(as.complex(d)) * c(1, -1)) / 2 / a))
      }
  }
}

Комментарии

]]>

blog comments powered by Disqus

]]>

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