Bagaimana cara mendefinisikan fungsi `bc` untuk digunakan nanti?

8

Saya selalu menemukan bcjenis yang misterius dan menarik. Itu adalah salah satu yang program Unix original. Dan itu adalah bahasa pemrograman untuk dirinya sendiri. Jadi saya dengan senang hati mengambil kesempatan yang dapat saya temukan untuk menggunakannya.

Karena bc tampaknya tidak memasukkan fungsi faktorial, saya ingin mendefinisikan yang seperti ini:

define fact(x) {
  if (x>1) {
    return (x * fact(x-1))
  }
  return (1)

}

Tapi ... kalau begitu aku tidak bisa menggunakan kembali itu, kan?

Saya ingin dapat melakukan sesuatu seperti

me@home$ bc <<< "1/fact(937)"
ixtmixilix
sumber

Jawaban:

11

Simpan definisi fungsi Anda dalam file seperti factorial.bc, dan kemudian jalankan

bc factorial.bc <<< '1/fact(937)'

Jika Anda ingin fungsi faktorial selalu dimuat ketika Anda menjalankan bc, saya sarankan membungkus bcbiner dengan skrip atau fungsi shell ( apakah skrip atau fungsi yang terbaik tergantung pada bagaimana Anda ingin menggunakannya).

Script ( bc, untuk dimasukkan ~/bin)

#!/bin/sh

bc ~/factorial.bc << EOF
$@
EOF

Fungsi (untuk memasukkan file rc shell)

bc () {
    bc ~/factorial.bc << EOF
    $@
    EOF
}

Dari bcspesifikasi POSIX :

Itu harus mengambil input dari file yang diberikan, kemudian membaca dari input standar.

jw013
sumber
Mungkin Anda bisa memanggil file .bcrc? Bisakah Anda menaruh banyak definisi dalam file yang sama?
Bernhard
Ya, Anda dapat memasukkan sintaks bc yang valid dalam file. Apa yang Anda panggil file dan di mana Anda meletakkannya sepenuhnya terserah Anda.
jw013