Solucionador de expressões de linha de comando?

8

Estou procurando uma calculadora baseada em TTY compatível com Linux. Por exemplo:

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

Existe algo assim que suporte operações básicas, algumas funções internas como atan() e possivelmente funções personalizadas via script?

    
por Lucas Phillips 14.12.2013 / 03:00

7 respostas

7

bc & dc

bc e dc são as duas calculadoras que eu usarei com frequência quando precisar de acesso de um terminal.

Exemplos

$ 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'. 

Depois, você pode digitar suas perguntas:

2
2
5+5
10

Quando estiver pronto, você pode sair com uma Ctrl + C .

Test drive

Essas calculadoras são muito ricas em recursos.

dimensionamento

scale=5
193 * 1/3
64.33333

equações

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

futurevalue
127.62800

seus exemplos

8*6-4
44

8*(6-4)
16

calc

Se você quiser algo um pouco mais interativo, calc .

Exemplo

$ 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
; 

Você pode usar as setas para cima / para baixo para passar pelos comandos anteriores e também tem ajuda interativa.

; help

Dá-lhe isto:

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
    ...

Referências

por 14.12.2013 / 03:40
6

Existem muitas respostas para sua pergunta ...

Os mais simples que você poderia fazer no shell.

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

Como programa dedicado, há bc .

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

Funções personalizadas via script? Bem, shell scripts e bc os têm, de certa forma. Depende de quão longe você quer levá-lo.

Por que não Python? É fácil aprender.

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0
    
por 14.12.2013 / 03:10
5

Em zsh :

$ autoload zcalc  # best in ~/.zshrc
$ zcalc
1> 8*(6-4)
16
2> $1*2
32
    
por 14.12.2013 / 03:25
4

inseto tem versões baseadas em web e em terminal:

    
por 30.04.2017 / 18:09
2

Maxima CAS :

   L(t):=exp(%i*t*2*%pi); /* unit circle parametrised with angle in turns */
   plot2d(
   [atan2(imagpart(L(x)),realpart(L(x)))],
   [x,0,1],
   [y,-2*%pi,2*%pi],
   [plot_format, gnuplot],
   [gnuplot_term,"png"],
   [gnuplot_out_file, "atan2.png"],
   [legend, "atan2"],
   [xlabel,"angle in radians"], 
   [ylabel,"angle in radians"],
   [gnuplot_preamble,"
   set key left top;
   set xtics ('pi/2' 0.25, 'pi' 0.5, '3pi/2' 0.75,'2pi' 1.0);
   set ytics ('-2pi' -6.283, '-pi' -3.1415, '-pi/2' -1.5708, '0' 0, 'pi/2'  1.5708, 'pi' 3.1415, '2pi' 6.283);
   set grid xtics ytics "]
  );

HTH

    
por 25.04.2014 / 17:40
1

Aqui está um pequeno hack bash que permitirá que você faça uma simples aritmética diretamente na linha de comando.

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

Então você pode fazer, por exemplo,

calc 3 * 15 + 5

Infelizmente, não funciona bem com parênteses. (Se bem me lembro, você pode fazer com que o tcsh aceite isso também, mas não consegui convencer o bash).

PS. Você poderia confiar no bash para a aritmética, substituindo a chamada perl por echo $(( $* )) ; mas isso lhe dará divisão inteira para 5/6 , etc. A aritmética de Perl é mais útil.

Alternativa: Se a sua única carne com python é que você precisa para import math , o seguinte é seu amigo:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)
    
por 15.12.2013 / 04:21
0

Outra maneira é usar um interpretador como o Python 3:

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

Tem a vantagem de que você pode fazer script de tudo, existem muitas funções (você também pode importar cmath se precisar de números complexos), você não precisa definir nenhuma precisão para a maioria dos casos e o python já está instalado na maioria das instalações do Linux.

O Python 3.x é melhor para uma calculadora genérica do que o Python 2.x, porque o Python 3.x faz uma divisão de ponto flutuante se o resultado não for um int.

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

A grande desvantagem, pelo menos para mim, é que os floats não são impressos na notação científica se não houver muito grande ou pequeno, sem uma string de formato:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
    
por 13.04.2017 / 19:26