Wie wäre es mit Typenklassen?
%Vor%Vielleicht das? Nimmt Assoziativität an, aber das Hinzufügen einer neuen Ebene ist einfach
%Vor% Sie müssen von innen nach außen arbeiten. Wenn Sie eine Funktion map sum
zum Summieren einer Datenstruktur haben, dann ist %code% die Methode, eine Liste dieser Datenstrukturen zu summieren.
Zuerst gibt es Template Haskell (GHC-Erweiterung). Oder Sie könnten ein %code% verwenden, das willkürliche Tieflistenverschachtelung wie folgt unterstützt:
%Vor%Was %code% hier ausgibt. Dies stellt jedoch nicht sicher, dass alle Blätter die gleiche Verschachtelungstiefe haben, und ich weiß nicht, wie man das aus Listen erstellt.
Es scheint mir am natürlichsten zu sein, die %code% einer zusätzlichen Dimension als %code% der vorherigen Dimension zu definieren.
%Vor%Das ist im Grunde die gleiche Idee wie das, was Sjoerd gesagt hat. Wenn Sie nur %code% und %code% verwenden wollen und nicht allgemeine Teilausdrücke in nützliche Namen umgestalten sollen ... dann ersetzen Sie die benutzerdefinierten Funktionen %code% , %code% usw. durch Gleichsetzung.
Sie müssen von innen nach außen arbeiten. Wenn Sie eine Funktion f
zum Summieren einer Datenstruktur haben, dann ist sum . map f
die Methode, eine Liste dieser Datenstrukturen zu summieren.
Es scheint mir am natürlichsten zu sein, die sum
einer zusätzlichen Dimension als sum
der vorherigen Dimension zu definieren.
Das ist im Grunde die gleiche Idee wie das, was Sjoerd gesagt hat. Wenn Sie nur map
und sum
verwenden wollen und nicht allgemeine Teilausdrücke in nützliche Namen umgestalten sollen ... dann ersetzen Sie die benutzerdefinierten Funktionen sum2
, sum3
usw. durch Gleichsetzung.
Zuerst gibt es Template Haskell (GHC-Erweiterung). Oder Sie könnten ein data
verwenden, das willkürliche Tieflistenverschachtelung wie folgt unterstützt:
Was 19
hier ausgibt. Dies stellt jedoch nicht sicher, dass alle Blätter die gleiche Verschachtelungstiefe haben, und ich weiß nicht, wie man das aus Listen erstellt.
Tags und Links haskell