On Mon, Aug 04, 2003 at 11:22:10PM +0200, Fran�ois TOURDE wrote:
> Le 12268i�me jour apr�s Epoch,
> Yves Rutschle �crivait:
> 
> > Dans le programme Perl suivant, 'deriv' cr�e une _nouvelle_,
> > vraie fonction qui calcule la d�riv�e de la fonction donn�e
> > en param�tre.
> >
> > #! /usr/bin/perl
> >
> > my $eps=1e-10;
> >
> > sub deriv {
> >   my ( $f ) = @_;
> >
> >   return sub {
> >     my ( $x ) = @_;
> >     return (&$f($x+$eps) - &$f($x))/$eps;
> >   }
> > }
> >
> > sub sinus {
> >   return sin( $_[0] );
> > }
> >
> > my $cos = deriv( \&sinus );
> > my $sin = deriv( $cos );
> >
> > print &$sin( 0 );
> > print "\n";
> >
> > Faire la m�me chose en C (cr�er une nouvelle fonction) sera
> > pour le moins goret, si c'est possible.
> 
> C'est possible en C, avec des pointeurs de fonctions, et c'est pas plus
> goret qu'en perl :) ... �a fait trop longtemps que j'ai pas jou� � C

Je suis pas expert en perl, donc je peut pas commenter sur le code ci
dessus, mais il me semble qu'en C, il n'est pas possible de creer des
fonctions dynamiquement, a moins d'avoir l'information sur la
representation interne des fonctions, ce qui n'est du coup pas du tout
portable. Et quand je dis dynamiquement, je dis une fonction que l'on
cree durant l'execution du programme. Bien sur qu'on peut utiliser des
pointeurs de fonctions, c'est tres util, et abondament utilise dans de
nombreux logiciels, comme xfree86 par exemple, et a chaque fois qu'on
veut faire de l'oriente objet en C :)))

Amicalement,

Sven Luther

Répondre à