pl: Schönheitswettbewerb

Beitrag lesen

Zusätzlich hat die Haskell-Definition mit weniger Worten mehr zum Ausdruck gebracht: Die Funktion f1 ist typsicher, wenn sie mit einem String oder einem beliebigem nicht numerischen Wert aufgerufen wird, gibt es einen Typfehler zur Compilezeit. Außerdem funktioniert die Haskell-Variante ohne weiteres Zutun auch mit unbeschränkt großen Zahlen und beliebig genauen reellen Zahlen.

Wobei man dies natürlich nicht aus f1 = (*) herauslesen kann.

Das stimmt, das zu sehen erfordert Haskell-Vorwissen,

Das ist toll aber in Perl genauso daß man da ein gewisses Vorwissen braucht.

ich hätte den Typen auch ausschreiben können, um es explizit zu machen.

f1 :: Int -> (Int -> Int)
f1 = (*)

Die Typsignatur drückt folgendes aus: „f1 ist eine Funktion, die einen Int-Wert entgegen nimmt und eine Funktion zurück gibt, die ebenfalls einen Int-Wert entgegen nimmt und einen Int-Wert zurück liefert“.

Multiplikation ist nicht auf Integer beschränkt. In Perl hat der * übrigens auch eine weitere Bedeutung die jedoch jeder Perlentwicker sofort sieht am Ausdruck:

*f1 = sub{}; # Typeglob
$x * $x;     # Multiplikation

Wichtig zum Verständnis der ganzen Geschichte hier ist auch das Wissen um das statische Verhalten:

state $f3 = f1(3);

was aber auch ohne das Schlüsselwort state per se so ist. In Perl kann man per local sogar mit dynamischen Scope arbeiten, hier mal alles zsamme:

local $, = "\n";
sub f1{ 
    my $x = shift;
    sub{
        my $y = shift;
        $x * $y;
    }
}

# CODE Referenzen speichern
state $f3 = f1(3);
our $f5 = f1(5);

# CODErefs ausführen
print $f3->(11), $f5->(7), "\n"; # 33 35

do{
    local $f5 = f1(50);
    print $f5->(10), "\n";   # 500
};

print $f5->(10); # 50

MfG

0 49

Ganz kleines JavaScript-Programm

Julia
  • javascript
  1. 1
    JürgenB
    1. 0
      Julia
      1. 0
        Felix Riesterer
        1. 0
          J o
  2. 0
    J o
    1. 0
      Julia
  3. 5
    Orlok
    • javascript
    • programmiertechnik
  4. 3
    Felix Riesterer
    1. 2
      dedlfix
      1. 0
        pl
    2. 2

      Scope

      Orlok
      • javascript
      • perl
      1. 0
        Felix Riesterer
        1. 0
          pl
          1. 0
            Felix Riesterer
            1. 0
              pl
              1. 0
                Felix Riesterer
      2. 0
        pl
        1. 0
          pl
          • perl
        2. 1
          Tabellenkalk
          • perl
          1. 0
            pl
            1. 1
              Tabellenkalk
        3. 0

          Schönheitswettbewerb

          1unitedpower
          • programmiertechnik
          1. 0
            pl
            1. 0
              1unitedpower
              1. 0
                pl
                1. 0
                  1unitedpower
                  1. 0
                    pl
                    1. 4
                      1unitedpower
                      1. 0
                        Matthias Apsel
                        1. 1
                          1unitedpower
                          1. 0
                            pl
                            1. 0
                              Matthias Apsel
                            2. 0
                              1unitedpower
                              1. 0
                                pl
                                1. 0
                                  pl
                                  1. 0
                                    1unitedpower
                                2. 0
                                  1unitedpower
                                  1. 0
                                    pl
                                    1. 0
                                      1unitedpower
                      2. 0
                        Rolf B
                        1. 0
                          1unitedpower
                          1. 0
                            Rolf B
                            1. 0
                              1unitedpower
                        2. 0
                          pl
      3. 0

        Dynamic Scope

        pl
  5. 0
    pl
    1. 0
      Matthias Apsel
  6. 1
    Es