Thread Funktionale Programmierung in Perl
(10 answers)
Opened by neniro at 2008-12-19 23:29
Hallo zusammen,
Lan-X hatte mich gebeten folgendes Beispiel auch mal im Forum zur Diskussion zu stellen. Beim letzten darmstadt.pm habe ich erwähnt, dass ich mir ein Buch zu F# gekauft habe. Die meisten Beispiele sind problemlos nach Perl portierbar. Wer das HOP kennt, gewinnt nochmal 'ne etwas andere Perspektive. Anbei mal ein Beispiel für eine Funktion ($d->($f) bildet die Ableitung) die sowohl direkt, als auch mit Curry ;-) genossen werden kann: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $EPSILON = 1e-7; my $f = sub { my $x = shift; return $x ** 2 - 2 * $x + 7; }; my $d = sub { my ($f, $x) = @_; my $d_ = sub { my $x = shift; return sprintf "%.3f", ($f->($x+$EPSILON) - $f->($x-$EPSILON))/( 2 * $EPSILON ); }; return defined $x ? $d_->($x) : $d_; }; print Dumper [ map $f->($_), 0..9 ]; print Dumper [ map $d->($f, $_), 0..9 ]; my $d_of_f = $d->($f); print Dumper [ map $d_of_f->($_), 0..9 ]; Natürlich können Sprachen wie Haskell oder F# das noch etwas eleganter, aber die Möglichkeit eine Funktion direkt mit einem Parameter auszuwerten und ansonsten eine Funktion zurückzugeben, die man später mit konkreten Werten nutzen kann, ist schon schick. Wenn es euch interessiert, liefere ich gerne noch ein paar interessante Beispiele wenn ich in dem Buch vorankomme. -- yet another amateur perl hacker
|