Ich möchte diese Funktion point-free machen, um es zu vereinfachen. Ich gebe die Länge explizit weiter, anstatt sie zu berechnen, da ich sie auch für andere Funktionen benötige, und ich möchte sie nur einmal berechnen. Ich habe es geschafft, den Ziel-String-Parameter loszuwerden, aber mit den anderen beiden zu kämpfen.Machen Sie diese Funktion tacit
-- Cycle with respect to whitespace (currently only spaces).
-- Given a source string and its length, and a longer target string
-- (which may contain spaces) match the source to target such that:
-- 1. both will have the same length
-- 2. spaces in the target string will remain spaces
-- 3. chars from the source string will be cycled
--
-- Example:
-- src: "ALLY", len: 4
-- target: "MEET AT DAWN"
-- Result: "ALLY AL LYAL"
cycleWS :: String -> Int -> String -> String
cycleWS str len = fst . (foldr (\x (s, n) -> if x == ' ' then (s ++ " ", n) else (s ++ [str !! (n `mod` len)], n + 1)) ("", 0))
Wie wäre es macht es einfacher, indem sie in leicht zu verstehende Stücke zu brechen, statt? –
Sicher, ich bin offen für Vorschläge. – dimid
Nun, wie wäre es mit einer Funktion, um eine Zeichenkette mit den Leerzeichen in einer anderen Zeichenkette anzuordnen, plus 'cycle'. –