Lazy kartesianisches Produkt in Haskell

9

Ich möchte ein ziemlich großes aber endliches kartesisches Produkt in Haskell erzeugen, das ich dann durchlaufen muss (denke an die Partitionsfunktion eines Mean-Field-Modells). Das Natürliche, was zu tun ist, verwendet sequence , wie folgt:

%Vor%

Leider passt dies für große n nicht in den Speicher und ich habe keinen Heap mehr, wenn ich zum Beispiel length l anfrage. Ich würde einen Weg brauchen, um dasselbe faul zu machen. Am Ende habe ich die Basis-3-Arithmetik "wiederentdeckt", so

%Vor%

(was funktioniert), aber es fühlt sich an, als würde man das Rad neu erfinden, und außerdem ist es viel zu spezifisch. Was wäre ein besserer fauler Weg, um das Produkt zu generieren?

    
Vincent Beffara 12.04.2012, 11:44
quelle

1 Antwort

5
___ qstnhdr ___ Lazy kartesianisches Produkt in Haskell ___ antwort10123967 ___

Der mehr speicherfreundliche Weg wird durch Binden in umgekehrter Reihenfolge im Vergleich zur Sequenz erreicht,

%Vor%

Es ist langsamer, weil weniger geteilt wird, aber da Speicher dein Problem ist, ist es vielleicht gut genug für dich.

    
___ qstntxt ___

Ich möchte ein ziemlich großes aber endliches kartesisches Produkt in Haskell erzeugen, das ich dann durchlaufen muss (denke an die Partitionsfunktion eines Mean-Field-Modells). Das Natürliche, was zu tun ist, verwendet %code% , wie folgt:

%Vor%

Leider passt dies für große %code% nicht in den Speicher und ich habe keinen Heap mehr, wenn ich zum Beispiel %code% anfrage. Ich würde einen Weg brauchen, um dasselbe faul zu machen. Am Ende habe ich die Basis-3-Arithmetik "wiederentdeckt", so

%Vor%

(was funktioniert), aber es fühlt sich an, als würde man das Rad neu erfinden, und außerdem ist es viel zu spezifisch. Was wäre ein besserer fauler Weg, um das Produkt zu generieren?

    
___ tag123haskell ___ Haskell ist eine funktionale Programmiersprache mit starker statischer Typisierung, verzögerungsfreier Auswertung, umfangreicher Parallelitäts- und Parallelitätsunterstützung und einzigartigen Abstraktionsfunktionen. ___
Daniel Fischer 12.04.2012, 12:53
quelle

Tags und Links