Thread Funktionale Programmierung in Perl (10 answers)
Opened by neniro at 2008-12-19 23:29

neniro
 2008-12-19 23:29
#117364 #117364
User since
2008-12-14
79 Artikel
BenutzerIn
[default_avatar]
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

View full thread Funktionale Programmierung in Perl