Comment définir une fonction `bc` pour une utilisation ultérieure?

8

J'ai toujours trouvé le bcgenre mystérieux et intrigant. Il était l' un des les programmes Unix d' origine. Et c'est un langage de programmation en soi. Je prends donc volontiers toute chance que je puisse trouver pour l'utiliser.

Puisque bc ne semble pas inclure de fonction factorielle, je veux en définir une comme ceci:

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

}

Mais ... je ne peux pas alors réutiliser ça, n'est-ce pas?

Je voudrais pouvoir faire quelque chose comme

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

Réponses:

11

Enregistrez vos définitions de fonctions dans un fichier comme factorial.bc, puis exécutez

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

Si vous souhaitez que la fonction factorielle soit toujours chargée lorsque vous exécutez bc, je vous suggère d'encapsuler le bcbinaire avec un script ou une fonction shell ( si un script ou une fonction est préférable dépend de la façon dont vous souhaitez l'utiliser).

Script ( bc, à mettre ~/bin)

#!/bin/sh

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

Fonction (pour mettre dans le fichier shell rc)

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

D'après les bcspécifications POSIX :

Il doit prendre l'entrée de tous les fichiers donnés, puis lire à partir de l'entrée standard.

jw013
la source
Vous pouvez peut-être appeler le fichier .bcrc? Pouvez-vous mettre plusieurs définitions dans le même fichier?
Bernhard
Oui, vous pouvez mettre n'importe quelle syntaxe bc valide dans le fichier. Ce que vous appelez le fichier et où vous le placez dépend entièrement de vous.
jw013