Введение

Программа dc (настольный калькулятор) — это кроссплатформенный калькулятор с обратной польской нотацией, поддерживающий арифметику произвольной точности. Она была написана Лориндой Черри и Робертом Моррисом в лабораториях Белла. Традиционно, программа калькулятора bc (с инфиксной нотацией) реализовывалась на основе dc. В этой статье приведены некоторые примеры, чтобы дать общее представление о языке; для получения полного списка команд и синтаксиса следует обратиться к справочной странице для конкретной реализации.

История

dc — старейшая сохранившаяся программа на языке Unix. Когда компания Bell Labs получила PDP-11, dc, написанная на языке B, стала первым языком программирования, запущенным на новом компьютере, даже раньше ассемблера. Кен Томпсон полагает, что dc была самой первой программой, написанной для этой машины.

Струнки

Строковые значения заключаются в символы [ и ] и могут быть помещены в стек и сохранены в регистрах. Команда 'a' преобразует младший байт числового значения в символ ASCII, или, если на вершине стека находится строка, заменяет её первым символом этой строки. Не существует способов построения строк или выполнения строковых операций, кроме как обработки их командой 'x' или вывода на печать командой 'P'. Символ # начинает комментарий до конца строки.

Печать всех простых чисел

echo '2p3p[dl!d2+s!%0=@l!l^!<#]s#[s/0ds^]s@[p]s&[ddvs^3s!l#x0<&2+l. x]ds. x' | dc
Эта программа была написана Мишелем Шарпентье. Она выводит последовательность простых чисел. Обратите внимание, что существует более короткая реализация, которая читает четырнадцать символов меньше. echo '2p3p[pq]s$[l!2+ds!l^<$dl!%0<#]s#[+dvs^1s!l#x2l. x]ds. x' | dc

Экологические переменные

Если существует переменная окружения DC LINE LENGTH и содержит целое число, большее 1 и меньшее, чем [не указано в оригинале], вывод количества цифр (в соответствии с основанием системы счисления) будет ограничен этим значением, после чего будут добавлены обратные слеши и переносы строк. Длина строки по умолчанию — 70. Специальное значение 0 отключает переносы строк.