[О блоге] [наверх] [пред] [2020-09-22 13:14:00+03:00] [d65882c3c5decb9e2216d7a8de98c1d422c2c42d]
Темы: [tip][zsh]

Наконец-то удобный RPN калькулятор

https://en.wikipedia.org/wiki/Dc_(computer_program)
Со школы хотел считать на калькуляторах с обратной польской нотацией,
ибо уж больно нравится она мне своей простотой и удобством для
компьютеров. Но так руки и не доходили (значит и не так уж больно то
сильно и хотел :-)). В качестве калькулятора (не RPN) я долгое время
использовал python, но это мне не нравилось ибо его запуска приходится
ждать, а что-нибудь да посчитать регулярно бывает надо. Потом я для себя
открыл встроенный zcalc в zsh, который долгое время и использовал, ибо
запускается мгновенно (и так на zsh написан), умеет дробные числа и
квадратный корень.

Недавно обнаружил что в zcalc есть RPN режим. Но... в нём после каждого
expression нужно нажимать enter. То есть 2<CR>2<CR>+<CR>. Судя по
рассылке zsh, сделать "2 2 +<CR>" уже совсем не тривиально становится.
Могу понять почему. Но это не отменяет что часто хочется полностью
отредактировать всю строку ввода (всю формулу), что-то в середине
поменяв.

Сегодня пытался вспомнить а чем мне dc не угодил? Та самая программа,
которая, как гласит Кен Томпсон, была первой написана на PDP-11. У неё
неудобный интерфейс: нет возможности редактирования строки, нет истории.
Хотя возможностями вроде бы полностью удовлетворяет. И тут меня осенило:
есть же rlwrap утилита! И действительно с ней dc автоматом заимел
readline командную строку с историей и (благодаря настроенному .inputrc)
vi-режим сразу же. Похоже что идеальный RPN калькулятор, можно сказать
из коробки (dc вроде везде есть), появился. Более того, мне нередко
нужно узнать длину строки и dc это умеет делать. Вот только с кириллицей
он покажет 12 для "привет", так что тут придётся запускать или python
или wc -m. Плюс в dc можно удобно задавать точность после точки, что для
человека очень удобно. Плюс можно задавать в каком виде вводить/выводить
числа (hex, octal, и т.д.), что тоже бывает нужно.

В общем, UNIX-way и подход с rlwrap-ом, до которого я годами раньше не
догадался, отлично работает!

    [оставить комментарий]