Ich versuche, ein gefiltertes kartesisches Produkt aus einer bestimmten Liste von Listen zu erstellen. Die naive Lösung ist folgende:gefilterte Liste kartesisches Produkt ohne Zwischenliste
import Data.Traversable (sequence)
predicate :: [T] -> Bool
predicate = ...
filteredCartesianProduct :: [[T]] -> [[T]]
filteredCartesianProduct = filter predicate . sequence
Ist Traversable mächtig genug, um es ohne Erstellen einer Zwischenliste zu tun? Gibt es einen idiomatischen Weg, dies zu tun?
Angenommen, die Signatur Ihrer 'Prädikat'-Funktion ist korrekt, dann ist Ihre Implementierung von 'filteredPowerSet' falsch. Warum komponierst du 'Filter-Prädikat' mit' Sequenz'? Dies wird nicht überprüft. Sollte Ihre Implementierung nicht 'filteredPowerSet = Filterprädikat' sein? – liminalisht
Der deklarierte Typ impliziert, dass Sie bereits ein Potset, nicht ein Set, als Argument erhalten (oder zumindest erwarten). – chepner
Ich erhalte eine Liste von Listen, wie [[1,2], [3,4,5]], die Sequenz ergibt folgendes: [[1,3], [1,4], [1,5], [2,3], [2,4], [2,5]]. – lanskey