Я хотел бы сделать эту функцию беспружинной, чтобы ее упростить. Я передаю длину явно вместо того, чтобы вычислять ее, так как мне также нужно это для других функций, и я хотел бы вычислить ее только один раз. Я сумел избавиться от параметра целевой строки, но боролся с двумя другими.Сделать эту функцию 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))
Как о том, что проще, разбив его в легкие для понимания деталей, вместо этого? –
Конечно, я открыт для предложений. – dimid
Ну, как насчет функции выстроить строку с пробелами в другой строке, плюс 'цикл'. –