Ich habe den folgenden Code verwendet, um alle Kombinationen einer vorgegebenen Anzahl von Zahlen zu erhalten:
%Vor%Das war in Ordnung, aber ich möchte das Programm erweitern, um sehr große Listen zu bearbeiten, und ich denke, dass es einen besseren Weg dafür geben muss. Wie würde ich eine Funktion erstellen, die denselben Parameter x wie hier verwendet, und einen weiteren Parameter für die Anzahl der Elemente, die die Unterlisten haben. Für vier Elemente würde ich gehen und den Code ändern:
%Vor%Es muss kein Listenverständnis sein. Danke für jede Hilfe.
Ich glaube, was Sie wollen, wäre die Funktion replicateM
in Control.Monad
.
Die Listen-Monade basiert auf "alle möglichen Kombinationen ausprobieren", und plain replicate
erstellt eine Liste, indem ein Element mehrmals wiederholt wird. Das Ergebnis von replicateM
ist also, bei einer Liste möglicher Werte, eine Liste aller möglichen Möglichkeiten, ein Objekt aus dieser Liste einige Male auszuwählen.
Zum Beispiel:
%Vor%Um Ihre Funktion auf beliebige Wiederholungen zu erweitern, verwenden Sie etwas wie:
%Vor% ... wobei Ihre ursprüngliche getList
äquivalent zu getListN 3
wäre.
Tags und Links haskell list-comprehension