KRC (Kent Recursive Calculator)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:03, 2 июня 2016.
Kent Recursive Calculator
Парадигма функциональный
Спроектировано Девид Тёрнер
Первый   появившийся 1981
Под влиянием
LISP, SASL
Влияние
Miranda

Kent Recursive Calculator (KRC) - ленивый (отложенный) функциональный язык программирования, базирующийся на рекурсивных вычислениях высокого порядка.

История создания

KRC разработан в 1981 году Девидом Тёрнером на базе другого разработанного им функционального языка SASL. В 1985 году Тёрнер создал функциональный язык Миранда на основе KRC.

KRC был создан для обучения. Тёрнер в своей книге Functional Programming and Its Applications объясняет, почему он не использует LISP: он считает семантику языка LISP слишком сложной и содержащей большое количество не-функциональных особенностей, что затрудняет обучение.

Использование

В период с 1982 по создания языка Миранда в 1985 году KPC использовался для обучения функциональному программированию в Университете Кент в городе Кентербери, Великобритания.

Особенности

Программа (Тёрнер называет их скриптами) - набор уравнений, дающих математическое определение некоторым субъектам. Функции KRC больше похожи на математическую запись, чем функции других функциональных языков.

KRC работает с 4 типами:

  1. число,
  2. строка,
  3. список (в том числе бесконечный),
  4. функция.

Функциональность

  • Ленивые вычисления - стратегия откладывания вычисления до тех пор, пока не понадобится его результат.
  • Охраняющие выражения - выбор варината вычисления на основе булевского условия.
  • Сопоставление по образу - сравнение с точным значением, строкой, предикатом, типом данных или любой поддерживаемой языком конструкцией.
  • ZF-выражения (списковые включения) - компактное описание операций обработки списков, в том числе бесконечных списоков.
  • Интерактивность: встроенные команды для редактирования скриптов, сохранения. загрузки из файла.
  • Набор библиотечных функций для работы со списками как в LISP (map, filter, invert, rotate, swap и т.д.)

Синтаксис

Списки

Элементы списка записываются в квадратных скобках. Списки могут быть созданы следующими способами:

  • простым перечислением
[1,2]
  • конкатенацией
0: [1,2]
  • как отрезок от a до b
 [a..b] 
  • как бесконечный список
 [1..] 

Функции

Имя функции записывается слева от параметров.

Пример: функция возведения в квадрат
 sq n = n*n 

Примеры

Вычисление значения некоторой переменной

r = u/v
u = x+1
v = 11
x = 23

Порядок следования уравнений не имеет значения, они все равно не будут вычислены до тех пор, пока не понадобятся.
Получить значение переменной можно с помощью следующей команды:

r?

Вычисление простого числа

primes = sieve [2..]
sieve (p:x) = p:sieve {n; n <- x; n%p > 0}

Запрос на вывод чисел:

primes?

Результат - набор простых чисел - будет выводиться пока хватит места.

[2, 3, 5, 7, 11, 13, 17

Версии

  • Версия, написанная Тернером на языке BCPL - структурном языке, разработанном в 1966 в Кембридже и оказавшем влияние на языки В и Си. Эта версия разрабатывалась для компьютера EMAS.
  • Версия, написанная Саймоном Крофтом на Си.

Список литературы

  1. J. Darlington,P. Henderson,D. A. Turner : Functional Programming and Its Applications: An Advanced Course
  2. D. A. Turner : The semantic elegance of Applicative Languages