vorherige Seite | 1 2 |
Gepostet: |
|||||||||||
Bei Algorithmen wie Mergesort muss man eine Liste in zwei gleichgroße Teile splitten, dazu habe ich heute folgende clevere Implementierung gesehen:
Siehe http://stackoverflow.com/questions/13455849/is-this-implementation-of-merge-sort-good |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Nett :) Ich kann leider nicht mit solchen Tricks aufwarten. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Eine der unterschätztesten Funktionen des Preludes ist fromEnum. Insbesondere angewandt auf Bool ist es oft nützlich:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Wenn man filter und map nacheinander ausführen muss, und dabei eventuell noch zwei Unterfunktionen z.B. fürs Pattern Matching braucht, ist concatMap oft die bessere Wahl:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Wozu const so alles gut sein kann... Hier eine Möglichkeit, die Funktion Prelude.last inklusive Fehlerfall als Einzeiler zu schreiben:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Umwandlung in Ziffern, z.B. 12345 --> [1,2,3,4,5]
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Applikative Funktoren sind lustig, man kann sich damit z.B. manchmal replicate sparen. Angenommen, wir wollen jeden Buchstaben in einem Wort ver-n-fachen, dann geht die Standardlösung in Richtung ...
Wenn man sich aber einmal ansieht, wie der Operator (<*) funktioniert, z.B. ...
... kommt man schnell auf die recht elegante Lösung:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Letzterer Trick lässt sich in bestimmten Fällen auf 2D erweitern. Hier eine Matrix aus lauer Einsen:
|
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Gerade auf Stackoverflow gesehen ( http://stackoverflow.com/questions/16378773/map-multiple-functions-in-haskell ) :
Ich denke, ich verstehe wie das funktioniert, aber es dreht mir immer noch ein wenig das Hirn um... Wobei die pragmatische Variante...
...auch nicht schlecht ist. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ein paar Tricks, die mir so bei Merge-Sort eingefallen sind:
In sort arbeite ich mit einer zwei-elementigen Liste statt einem Paar, damit kann ich "map sort" schreiben. Das Pattern xs@(_:_:_) stellt sicher, dass ich mindestens zwei Elemente in der Liste habe. Damit kann ich danach den null- und ein-elementigen Fall zusammen abhandeln. Die split-Funktion hatte ich oben schon als splitInHalves erwähnt (einzige Änderung ist wieder die zwei-elementige Liste statt einem Paar). In merge habe ich die Fälle, dass mindestens eine der Listen leer ist, zusammengefasst. Die zwei-elementige Liste hat den Vorteil, dass ich einfach concat aufrufen kann, ohne die Einzelteile kennen zu müssen. |
|||||||||||
Zum Seitenanfang | |||||||||||
vorherige Seite | 1 2 |