Решатель выражений командной строки?

8

Я ищу совместимый с Linux калькулятор на основе TTY. Например:

user@host:~$ calculate
> 2
2
user@host:~$ calculate
> 8*6-4
44
user@host:~$ calculate
> 8*(6-4)
16

Есть ли что-нибудь подобное, поддерживающее базовые операции, некоторые встроенные функции и atan(), возможно, пользовательские функции с помощью сценариев?

Лукас Филлипс
источник

Ответы:

7

до н.э.

bcи dc2 калькулятора, которые я буду часто использовать при необходимости доступа с терминала.

Примеры

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

Затем вы можете ввести свои вопросы:

2
2
5+5
10

Когда вы закончите, вы можете выйти с Ctrl+ C.

Тест-драйв

Эти калькуляторы довольно многофункциональны.

пересчет

scale=5
193 * 1/3
64.33333

уравнения

principal=100
ir = 0.05
years = 5
futurevalue = principal * (1 + ir)^years

futurevalue
127.62800

ваши примеры

8*6-4
44

8*(6-4)
16

известково

Если вы хотите что-то более интерактивное, есть calc.

пример

$ calc
C-style arbitrary precision calculator (version 2.12.4.4)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 10+10
20
; 8*6-4
    44
; 8*(6-4)
    16
; 

Вы можете использовать стрелки вверх / вниз, чтобы пройти через прошлые команды, и он также имеет интерактивную справку.

; help

Дает вам это:

For more information while running calc, type  help  followed by one of the
following topics:

    topic               description
    -----               -----------
    intro               introduction to calc
    overview            overview of calc
    help                this file

    assoc               using associations
    builtin             builtin functions
    command             top level commands
    config              configuration parameters
    custom              information about the custom builtin interface
    define              how to define functions
    environment         how environment variables effect calc
    errorcodes          calc generated error codes
    expression          expression sequences
    file                using files
    history             command history
    interrupt           how interrupts are handled
    list                using lists
    mat                 using matrices
    ...

Ссылки

SLM
источник
Поскольку это не специфический для Ubuntu вопрос, может быть, ссылка на Calc Upstream вместо пакета Ubuntu?
mattdm
@mattdm - спасибо, добавил эту ссылку, я оставил другую ссылку просто потому, что я ссылался на справочную страницу на calc, а не обязательно на пакет ubuntu.
SLM
6

Есть много ответов на ваш вопрос ...

Простые, которые вы могли бы сделать в оболочке.

$ echo $((8*(6-4)))
16

В качестве специальной программы есть bc.

$ echo "8*(6-4)" | bc
16

Пользовательские функции с помощью сценариев? Ну, и у сценариев оболочки, и у bc они есть, в некотором роде. Зависит от того, как далеко вы хотите это сделать.

Почему не питон? Это легко учиться.

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0
frostschutz
источник
Я на самом деле использовал Python для этого в последнее время, но по этой причине я хочу что-то еще. Это раздражает необходимость импортировать что-то для каждой функции. Я надеялся больше на что-то автономное, например, Speedcrunch ( i.imgur.com/Cn6GejG.png ), но, очевидно, командная строка.
Лукас Филлипс
1
Вы можете решить проблему импорта, определив переменную среды PYTHONSTARTUP и предварительно импортировав материал в файл, на который указывает переменная.
MKC
5

В zsh:

$ autoload zcalc  # best in ~/.zshrc
$ zcalc
1> 8*(6-4)
16
2> $1*2
32
Стефан Шазелас
источник
2

Максима CAS :

   Л (т): = ехр (% I * T * 2 * пи%); / * единица окружности параметризована с углом в поворотах * /
   plot2d (
   [Atan2 (imagpart (Л (х)), realpart (Л (х)))],
   [х, 0,1],
   [У, -2 *% р, 2 *% р],
   [plot_format, gnuplot],
   [Gnuplot_term, "PNG"],
   [gnuplot_out_file, "atan2.png"],
   [легенда, "atan2"],
   [xlabel, "угол в радианах"], 
   [ylabel, «угол в радианах»],
   [Gnuplot_preamble»
   установить ключ слева вверху;
   установить xtics («pi / 2» 0,25, «pi» 0,5, «3pi / 2» 0,75, «2pi» 1,0);
   установите ytics ('-2pi' -6,283, '-pi' -3,1415, '-pi / 2' -1,5708, '0' 0, 'pi / 2' 1,5708, 'pi' 3,1415, '2pi' 6,283);
   установить сетку xtics ytics "]
  );

НТН

Адам
источник
1

Вот небольшой взлом bash, который позволит вам сделать простую арифметику прямо в командной строке.

alias calc='set -o noglob; docalc'
function docalc { perl -e "print STDOUT $*, \"\\n\""; set +o noglob; }

Тогда вы можете сделать, например,

calc 3 * 15 + 5

К сожалению, это не очень хорошо с круглыми скобками. (Если я правильно помню, вы можете заставить tcsh принять их тоже, но я не смог убедить Баша.)

PS. Вы можете положиться на bash для арифметики, заменив perlвызов на echo $(( $* )); но это даст вам целочисленное деление 5/6и т. д. Арифметика Perl более полезна.

Альтернатива: если вам нужна только единственная говядина с питоном, то import mathваш друг:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)
Alexis
источник
0

Другой способ - использовать интерпретатор, такой как Python 3:

$ python3
> from math import *
> 213/53*exp(0.8)/asin(3)
9.645423462356044

Преимущество заключается в том, что вы можете писать все, что есть, есть много функций (вы также можете импортировать, cmathесли вам нужны комплексные числа), вам не нужно устанавливать точность для большинства случаев, и python уже установлен в большинстве установок Linux.

Python 3.x лучше для универсального калькулятора, чем Python 2.x, потому что Python 3.x делает деления с плавающей запятой, если результат не является int.

$ python3
> 3/2
1.5
$ python2
> 3/2
1

Основным недостатком, по крайней мере для меня, является то, что поплавки не печатаются в научной нотации, если они не очень большие или маленькие, без строки формата:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
+12431234123412341234123
источник