Lucid (язык программирования) - Lucid (programming language)
Эта статья слишком полагается на Рекомендации к основные источники.Апрель 2018 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | Поток данных |
---|---|
Разработано | Эдвард А. Эшкрофт Уильям В. Уэдж |
Впервые появился | 1976 |
Печатная дисциплина | Бестиповый |
Основной реализации | |
pLucid | |
Диалекты | |
GIPSY, Granular Lucid | |
Под влиянием | |
Я ПЛАВАЮ | |
Под влиянием | |
СИЗАЛ, PureData, Блеск |
Lucid это программирование потока данных язык, предназначенный для экспериментов с не-фон Нейман модели программирования. Он был разработан Биллом Уэджем и Эдом Эшкрофтом и описан в книге 1985 года. Lucid, язык программирования потоков данных.[1]
pLucid был первым устный переводчик для Lucid.
Модель
Lucid использует ориентированную на спрос модель для вычисления данных. Каждое утверждение можно понимать как уравнение, определяющее сеть процессоров и линий связи между ними, по которым проходят потоки данных. Каждый Переменная представляет собой бесконечный поток значений, а каждая функция - это фильтр или преобразователь. Итерация моделируется с помощью 'текущих' значений и оператора 'fby' (читается как 'за которым следует'), позволяющего составить потоки.
Lucid основан на алгебра историй, причем история представляет собой бесконечную последовательность элементов данных. С практической точки зрения, историю можно рассматривать как запись об изменении значений переменной, операции с историей, такие как первая и следующая, могут быть поняты способами, предложенными их именами. Первоначально Lucid задумывался как дисциплинированный, математически чистый язык с одним заданием, в котором проверка будет упрощена. Тем не менее поток данных Интерпретация оказала важное влияние на направление развития Lucid.[1]
Подробности
В Lucid (и других поток данных languages) выражение, содержащее переменную, которая еще не была граница ожидает, пока переменная не будет связана, прежде чем продолжить. Выражение вроде х + у
будет ждать, пока оба x и y не будут связаны, прежде чем вернуться с выводом выражения. Важным следствием этого является то, что избегается явная логика для обновления связанных значений, что приводит к значительному сокращению кода по сравнению с основными языками.
Каждая переменная в Lucid - это поток значений. Выражение n = 1 f на n + 1
определяет поток с помощью оператора 'fby' (a мнемонический для "за которым следует"). fby определяет, что следует после предыдущего выражения. (В этом случае поток производит 1, 2, 3, ...). Значения в потоке могут быть адресованы этими операторами (при условии, что x - это используемая переменная):
'первый х'
- выбирает первое значение в потоке x,
'Икс'
- текущее значение потока,
'следующий x'
- выбирает следующее значение в потоке.
'как'
- оператор, который что-то делает "сразу после" выполнения заданного условия.
'x на p'
--on - это оператор, который повторяет старое значение потока x и обновляет новые значения только тогда, когда поток p делает истинный
доступное значение. (Он служит для замедления потока x) то есть: x на p
это поток x с новыми значениями, появляющимися на истинности p.
Вычисления выполняются путем определения фильтров или функций преобразования, которые действуют на эти изменяющиеся во времени потоки данных.
Примеры
Факториал
fac, где n = 0 fby (n + 1); fac = 1 fby (fac * (n + 1)); конец
Последовательность Фибоначчи
fib, где fib = 0 fby (1 fby fib + next fib); конец
Итого за последовательность
total, где total = 0 fby total + x end;
Среднее значение
running_avg, где сумма = первая (входная), f по сумме + следующая (входная); n = 1 по n + 1; running_avg = сумма / число; конец;
простые числа
prime where prime = 2 fby (n всякий раз, когда простой (n)); n = 3 по n + 2; isprime (n) = not (divs) asa divs или prime * prime> N, где N - текущий n; divs = N mod prime eq 0; конец; конец
Диаграмма потока данных
Быстрая сортировка
qsort (a) = if eof (first a) then a else follow (qsort (b0), qsort (b1)) fi, где p = first aСхема потока данных
--------> всякий раз, когда -----> qsort --------- | ^ | | | | | нет | | ^ | | ---> первая | | | | | | | V | | | ---> меньше --- | | | | | V V --- + --------> всякий раз, когда -----> qsort -----> conc -------> ifthenelse -----> | ^ ^ | | | --------> следующий ----> первый ------> iseod -------------- | | | -------------------------------------------------- ---------Среднеквадратичное значение
sqroot (avg (square (a))), где square (x) = x * x; avg (y) = среднее, где n = 1 f на n + 1; среднее значение = первое y f, среднее значение + d; d = (следующий y - среднее) / (n + 1); конец; sqroot (z) = приблизительно asa err <0,0001, где Z - текущий z; приблизительно = Z / 2 fby (приблизительно + Z / приблизительно) / 2; err = abs (квадрат (приблизительно) -Z); конец; конецПроблема Хэмминга
h, где h = 1 f путем слияния (слияние (2 * h, 3 * h), 5 * h); merge (x, y) = if xx <= yy then xx else yy fi, где xx = x при xx <= yy; yy = y при yy <= xx; конец; конец;Диаграмма потока данных
Рекомендации
- ^ Уэдж, Уильям У .; Эшкрофт, Эдвард А. (1985). Lucid, язык программирования потоков данных. Академическая пресса. ISBN 0-12-729650-6. Получено 8 января 2015.
внешняя ссылка