Ich bin neu bei Haskell. Ich finde es schwierig, das folgende Subset-Programm mit Rekursion zu verstehen. Wie wird es bewertet?Haskell Rekursion Subsets
subset :: [a] -> [[a]]
subset [] = [[]]
subset (x:xs) = [zs | ys <- subset xs, zs <- [ys,(x:ys)]]
Ausgang: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Wenn ich auswerten manuell wie unten zusammenfassend wird
Manuelle Ausgabe: [],[3],[2],[1,2]
Ich vermisse einige Logik hier können Sie mir bitte helfen Verstehen Sie das obige Rekursionskonzept und welcher Teil von guard statement wird zuerst evaluiert?
Nur ein Tipp: Um große Code-Chunks zu formatieren, markieren Sie sie und drücken Sie Strg + k. Nur. Verwenden Sie "' s für kleine Stücke. – Carcigenicate
Bitte versuchen Sie auszudrücken, wie die letzte Zeile das Ergebnis in Englisch erstellt. Ich denke, das wird deutlich machen, wie es funktioniert. – Thilo
Ich kann mir nicht helfen, auf dieses einzeilige Juwel hinzuweisen, das tut, was Sie wollen. Es verwendet 'filterM' von' Control.Monad'. 'subset = filterM (const [Falsch, Wahr])'. Und damit erhalten Sie dieselbe Ausgabe (wenn auch anders angeordnet) als "Teilmenge" - sie ist nicht weniger effizient! – Alec