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.
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:
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
(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?
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.
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?
Tags und Links haskell