dc
dc (desk calculator) — пакунок для арифметичних обчислень із довільною точністю в UNIX-системах. Зазвичай він оперує в десятковій системі числення з цілими числами, однак можна задати системи числення для введення і виведення, а також точність обчислень. Загальна структура dc — стековий калькулятор, який використовує зворотний польський запис.
Синтаксис виклику:
dc [файл]
Якщо аргумент вказано, то спочатку введення виконується з файлу, а потім зі стандартного вхідного потоку.
dc розпізнає такі конструкції:
число | Значення числа поміщається в стек. Число — неперервний ланцюжок цифр 0-9 або букв A-F (шістнадцяткові цифри). На початку може стояти знак підкреслення _ для введення від'ємного числа. Число може містити десяткову крапку.
|
---|---|
+ — / * % ^ ~ | Верхні два числа стека додаються (+ ), віднімаються (- ), множаться (* ), ділятися (/ ), береться остача (% ), виконується піднесення до степеня (^ ) або відбувається ділення з остачею (~ ).
|
sx, Sx | Добувається вершина стека і поміщається в регістр з назвою x , де x — будь-який символ ASCII. Якщо конструкція має вигляд Sx , то x розглядається як стек, у який і поміщається добуте значення.
|
lx, Lx | Значення, що зберігається в регістрі x , поміщається в стек. Регістр x не змінюється. Спочатку всі регістри ініціалізуються нулем. Якщо конструкція має вигляд Lx , то x розглядається як стек, його вершина добувається і поміщається в головний стек.
|
d | Вершина стека подвоюється. |
p | Виводиться вершина стека (без видалення зі стека). |
P | Якщо вершина стека — ланцюжок символів, то вона друкується і видаляється зі стека. Якщо вершина стека є числом, то воно друкується як послідовність байтів і видаляється зі стека. |
f | Виводяться всі елементи стека (без видалення). Зручно для налагодження програм. |
q | Завершує роботу програми. При виконанні ланцюжка символів рівень рекурсії зменшується на два. |
Q | Завершує роботу програми. Вершина стека добувається і рівень рекурсії зменшується на отримане значення. |
x | Вершина стека трактується як ланцюжок символів, що містить команди dc, і виконується. |
X | Вершина стека замінюється кількістю цифр у її дробовій частини. |
[..] | Ланцюжок символів, взятий у дужки, поміщається у вершину стека. |
=x | Два верхні елементи стека добуваються і порівнюються. Якщо вони задовольняють зазначеній умові, то вміст регістра x розглядається як команда dc і виконується. Можна використовувати також знаки порівняння < і > та їх заперечення ! < і ! > .
|
v | Верхній елемент стека замінюється квадратним коренем з нього. Якщо він мав дробову частину, то вона враховується; в іншому випадку точність обчислень (див.команду k) нехтується. |
! | Залишок рядка інтерпретується як команда shell. |
c | Очищення стека. |
i | Вершина стека добувається і використовується як основа системи числення при введенні. Команда I поміщає використану при введенні основу системи числення у вершину стека. |
o | Вершина стека добувається і використовується як основа системи числення при виведенні. Команда o поміщає використану при виведенні основу системи числення у вершину стека. |
k | Добувається вершина стека; вона використовується для задання точності обчислень — кількості знаків у дробовій частині при виведенні і при виконанні множення, ділення і піднесення до степеня. |
z | У стек поміщається кількість його елементів. |
Z | Число у вершині стека замінюється його довжиною (без урахування десяткової крапки, знака мінус і провідних нулів, навіть якщо вони після десяткової крапки). |
? | Зі стандартного вхідного потоку вводиться один рядок і виконується. |
;: | Використовуються для операцій із масивами. |
Вивести факторіали перших 10 натуральних чисел:
[la1+dsa*pla10>y]sy 0sa1 lyx
Квайн (програма, яка виводить саму себе):
[91Pn[dx]93Pn]dx [91PP93P[dx]P]dx