Pemecah ekspresi baris perintah?

8

Saya mencari kalkulator berbasis TTY yang kompatibel dengan Linux. Sebagai contoh:

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

Apakah ada yang seperti ini yang mendukung operasi dasar, beberapa fungsi bawaan seperti atan(), dan mungkin fungsi khusus melalui skrip?

Lucas Phillips
sumber

Jawaban:

7

bc & dc

bcdan dc2 kalkulator yang sering saya gunakan ketika membutuhkan akses dari terminal.

Contohnya

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

Kemudian Anda dapat mengetik pertanyaan Anda:

2
2
5+5
10

Setelah selesai, Anda bisa keluar dengan tanda Ctrl+ C.

Uji jalan

Kalkulator ini kaya fitur.

scaling

scale=5
193 * 1/3
64.33333

persamaan

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

futurevalue
127.62800

contoh anda

8*6-4
44

8*(6-4)
16

kalk

Jika Anda menginginkan sesuatu yang sedikit lebih interaktif, ada calc.

Contoh

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

Anda dapat menggunakan panah atas / bawah untuk menelusuri perintah sebelumnya dan juga memiliki bantuan interaktif.

; help

Memberi Anda ini:

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

Referensi

slm
sumber
Karena ini bukan pertanyaan khusus Ubuntu, mungkin tautan ke calc upstream bukan ke paket Ubuntu?
mattdm
@mattdm - terima kasih menambahkan tautan itu, saya meninggalkan tautan lain hanya b / c saya menghubungkan ke halaman manual di calc, belum tentu paket ubuntu.
slm
6

Ada banyak jawaban untuk pertanyaan Anda ...

Yang sederhana bisa Anda lakukan di shell.

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

Sebagai program khusus ada bc.

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

Fungsi kustom melalui skrip? Nah, shell script dan bc sama-sama memilikinya. Tergantung pada seberapa jauh Anda ingin mengambilnya.

Kenapa tidak Python? Mudah dipelajari.

$ python
>>> from math import atan
>>> 8*(6-4)+atan(0)
16.0
frostschutz
sumber
Saya sebenarnya menggunakan Python untuk ini belakangan ini, tapi itulah alasan saya menginginkan sesuatu yang lain. Itu menjengkelkan karena harus mengimpor sesuatu untuk setiap fungsi. Saya berharap lebih untuk sesuatu yang mandiri, seperti Speedcrunch ( i.imgur.com/Cn6GejG.png ), tetapi baris perintah jelas.
Lucas Phillips
1
Anda dapat memecahkan masalah impor dengan mendefinisikan variabel lingkungan PYTHONSTARTUP dan memprioritaskan hal-hal dalam file yang ditunjukkan oleh variabel.
mkc
5

Dalam zsh:

$ autoload zcalc  # best in ~/.zshrc
$ zcalc
1> 8*(6-4)
16
2> $1*2
32
Stéphane Chazelas
sumber
4

serangga memiliki versi berbasis web dan terminal:

contoh penggunaan serangga

shark.dp
sumber
2

Maxima CAS :

   L (t): = exp (% i * t * 2 *% pi); / * satuan lingkaran parametrised dengan sudut bergantian * /
   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"],
   [legenda, "atan2"],
   [xlabel, "angle in radian"], 
   [ylabel, "angle in radian"],
   [gnuplot_preamble, "
   atur kunci kiri atas;
   atur xtics ('pi / 2' 0,25, 'pi' 0,5, '3pi / 2' 0,75, '2pi' 1.0);
   atur 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

Adam
sumber
1

Inilah bash hack kecil yang akan memungkinkan Anda melakukan aritmatika sederhana langsung di commandline.

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

Maka Anda dapat melakukan, misalnya,

calc 3 * 15 + 5

Sayangnya itu tidak cocok dengan tanda kurung. (Jika saya ingat dengan benar, Anda dapat meminta tcsh untuk menerimanya juga, tetapi saya tidak dapat membujuk bash untuk melakukannya.)

PS. Anda bisa mengandalkan bash untuk aritmatika, dengan mengganti perlpanggilan dengan echo $(( $* )); tetapi itu akan memberi Anda pembagian integer 5/6, dll. Aritmatika Perl lebih berguna.

Alternatif: Jika Anda hanya perlu menggunakan daging python import math, yang berikut adalah teman Anda:

% alias calc='python -i -c "from math import *"'
% calc
>>> 5 * atan(0.25)
Alexis
sumber
0

Cara lain adalah dengan menggunakan juru bahasa seperti Python 3:

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

Miliki keuntungan, bahwa Anda dapat membuat skrip segalanya, terdapat banyak fungsi (Anda juga dapat mengimpor cmathjika Anda memerlukan bilangan kompleks), Anda tidak perlu mengatur ketelitian untuk sebagian besar kasus dan python sudah diinstal pada sebagian besar instalasi Linux.

Python 3.x lebih baik untuk kalkulator generik daripada Python 2.x, karena Python 3.x melakukan pembagian float point jika hasilnya bukan int.

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

Kelemahan utama, bagi saya setidaknya, adalah, bahwa pelampung tidak dicetak dalam notasi ilmiah jika tidak ada yang sangat besar atau kecil, tanpa format string:

> exp(35)
1586013452313430.8
> "{:e}".format(exp(35))
'1.586013e+15'
12431234123412341234123
sumber