¿Cómo definir una función `bc` para su uso posterior?

8

Siempre he encontrado bcalgo misterioso e intrigante. Fue uno de los programas originales de Unix. Y es un lenguaje de programación en sí mismo. Así que con mucho gusto aprovecho cualquier oportunidad que pueda encontrar para usarlo.

Como bc no parece incluir una función factorial, quiero definir una de esta manera:

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

}

Pero ... no puedo reutilizar eso, ¿verdad?

Me gustaría poder hacer algo como

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

Respuestas:

11

Guarde las definiciones de sus funciones en un archivo como factorial.bcy luego ejecute

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

Si desea que la función factorial se cargue siempre cuando ejecuta bc, sugiero envolver el bcbinario con un script o función de shell ( si un script o función es mejor depende de cómo quiera usarlo).

Guión ( bc, para poner ~/bin)

#!/bin/sh

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

Función (para poner en el archivo shell rc)

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

De las bcespecificaciones POSIX :

Tomará la entrada de cualquier archivo dado, luego leerá de la entrada estándar.

jw013
fuente
¿Quizás pueda llamar al archivo .bcrc? ¿Puedes poner varias definiciones en el mismo archivo?
Bernhard
Sí, puede poner cualquier sintaxis bc válida en el archivo. Lo que llame el archivo y dónde lo coloque depende completamente de usted.
jw013