1unitedpower: Schönheitswettbewerb

Beitrag lesen

da muss ich jetzt erstmal eine Weile drüber nachdenken. Und mir darüber klar werden, ob ich mir die Kopfschmerzen wirklich antun will 😂.

Die Kopfschmerzen gehen auf meine Kappe, weil ich ein miserabler Erklärbär bin - sorry dafür. Ich glaube trotzdem, dass dir Haskell gefallen würde, deiner Aktivität in den Mathe-Threads zu Folge, bist du auf jedenfall Mathematik-begeistert - und die Mathematik hinter Haskell ist äußerst elegant und spannend.

Immerhin habe ich eins schon kapiert: hier ist ein > zuviel 😉.

Gut gesehen.

Und ich habe wohl die Begriffe "Currying" und "Partieller Anwendung" durcheinandergeworfen. Meine Curry2-Funktion führt ja offenbar kein Currying durch, sondern stellt die partielle Anwendung einer zweistelligen Funktion mit einem Parameter dar.

Ob deine curry2/uncurry2 Funktionen sich auf der Ebene des generierten Codes tatsächlich aufheben (sprich: Ob Haskell das erkennt und wegoptimiert), das wäre mal eine interessante Frage.

Da bin ich mir selber nicht sicher. Was man auf jeden Fall machen könnte, ist dem Haskell-Compiler die Optimierung bekannt zu machen, dazu kann man Termersetzungsrelgen angeben.

{-# RULES
  "curry2/uncurry2" forall f . curry2 (uncurry2 f) = f
  "uncurry2/curry2" forall f . uncurry2 (curry2 f) = f
#-}

Hier werden zwei Optimierungs-Regeln definiert, die erste Regel trägt den Namen "curry2/uncurry2", der Name dient lediglich Entwickler(innen) als Hilfe fürs Debugging und taucht im kompilierten Code nicht mehr auf. Die Regel drückt aus, dass wann immer ein Term der Form curry2 (uncurry2 f) gefunden wird, darf dieser Term durch f ersetzt werden und umgekehrt. Das f muss nicht f heißen, sondern kann ein beliebiger Term sein, deshalb ist f all-quantifiziert.

Eleganter wäre es natürlich den Bloat von vornerein zu vermeiden.

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