Ich brauche eine Funktion, die eine Liste aller möglichen Unterlisten zurückgibt, ohne Elemente zu überspringen, z.B. Unterlisten [1,2,3,4] sollten [[1,2,3,4], [1,2,3] usw.) zurückgeben, aber die Liste sollte NICHT [1,2,4] enthalten. Meine aktuelle "Lösung" istErstellen einer Liste von Unterlisten einer gegebenen Liste
>sublists :: [Integer] -> [[Integer]]
>sublists [] = [[]]
>sublists (x:xs) = [x:ys | ys <- sublists xs] ++ sublists xs
der folgende umfasst nicht [1,2,4]
Vielen Dank im Voraus
EDIT: Gefunden eine Lösung (mit einer wenig Hilfe von meinem Freund)
Sieht ein bisschen ungeschickt, aber es funktioniert
>sublists :: [Integer] -> [[Integer]]
>sublists [] = [[]]
>sublists (x:xs) = subs [] (x:xs) ++ sublists xs
> where
> subs :: [Integer] -> [Integer] -> [[Integer]]
> subs xs [] = [xs]
> subs xs (a:as) = (xs ++ [a]) : (subs (xs ++ [a]) as)
Ich möchte es selbst implementieren und es scheint wie Schwänze zum Beispiel würde nicht zurückkehren [1,2], wenn gegeben [1,2,3] – Grapengeter
Wenn Sie nicht wollten Sie es selbst als Übung implementieren, Sie würde nach "inits" (https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List.html#v:inits) aus "Data.List" suchen. (Ich habe "Schwanz" anstelle von "Inits" in meinem ursprünglichen Kommentar falsch geschrieben.) – duplode
Inits kommt nicht zurück [2,3] wenn gegeben [1,2,3]. Kombination beider Skips [2,3] in [1,2,3,4] – Grapengeter