next up previous contents index
suivant: Le type gen monter: Utilisation de giac à précédent: Utilisation dans un programme   Table des matières   Index

Pour définir de nouvelles fonctions de giac

On peut définir de nouvelles fonctions qui deviendront des fonctions de giac. Pour définir par exemple la fonction de nom pgcd ( et c'est l'instruction : const string _pgcd_s("pgcd"); qui définit le nom de la fonction), on tape :
 
// -*- mode:C++ ; compile-command: "g++ -I.. -fPIC -DPIC 
-g -c pgcd.cpp  -o pgcd.lo && ln -sf pgcd.lo pgcd.o && gcc 
-shared pgcd.lo -lc  -Wl,-soname -Wl,libpgcd.so.0 -o 
libpgcd.so.0.0.0 &&  ln -sf libpgcd.so.0.0.0 libpgcd.so.0 && 
 ln -sf libpgcd.so.0.0.0 libpgcd.so" -*-
using namespace std;
#include <stdexcept>
#include <cmath>
#include <cstdlib>
#include <giac/giac.h>
#include "pgcd.h"

#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC

  gen pgcd(gen a,gen b){
    gen q,r;
    for (;b!=0;){
      r=irem(a,b,q);
      a=b;
      b=r;
    }
    return a;
  }
  gen _pgcd(const gen & args){
    if ((args.type!=_VECT)||(args._VECTptr->size()!=2))
      setsizeerr();
    vecteur &v=*args._VECTptr;
    return pgcd(v[0],v[1]);
  }
  const string _pgcd_s("pgcd");
  unary_function_unary __pgcd(&_pgcd,_pgcd_s);
  unary_function_ptr at_pgcd (&__pgcd,0,true);
  

#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC
On compile avec la commande située après compile-command de l'en-tête du programme. Puis, pour l'insérer dans une session Xcas, il faut taper la commande insmod suivi du chemin absolu complet de la librairie, par exemple :
insmod("/home/user/giac-0.4.0/doc/en/libpgcd.so").
Cela suppose que le source de giac a été désarchivé dans le répertoire /home/user).

Sous-sections

Documentation de giac écrite par Renée De Graeve