KRC (Kent Recursive Calculator)
Последнее изменение этой страницы: 12:03, 2 июня 2016.
Парадигма | функциональный |
---|---|
Спроектировано | Девид Тёрнер |
Первый появившийся | 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 типами:
- число,
- строка,
- список (в том числе бесконечный),
- функция.
Функциональность
- Ленивые вычисления - стратегия откладывания вычисления до тех пор, пока не понадобится его результат.
- Охраняющие выражения - выбор варината вычисления на основе булевского условия.
- Сопоставление по образу - сравнение с точным значением, строкой, предикатом, типом данных или любой поддерживаемой языком конструкцией.
- 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.
- Версия, написанная Саймоном Крофтом на Си.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.