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