Итак, у меня есть эта функция, которая выравнивает текст влево для заданной ширины столбца. Я уже исправил некоторые из его проблем, но я не могу заставить его не использовать декрементированный параметр после его вызова, но вернуться к стартовому значению n
. Вот мой код:Сокращенное значение, указанное в рекурсии в Haskell
f n s
| length s <= n = take (length s) s ++ "\n"
| n >= (maximum . map length . words) s =
if s !! n == ' ' || s !! n == '\t' || s !! n == '\n'
then take n s ++ "\n" ++ f n (drop (n+1) s)
else f (n - 1) s --Here once called for some n-1 it proceeds to call it from then on only for it or even smaller n
| otherwise = error "Try bigger width!"
Вот пример, где to
на последней строке должно быть действительно на второй линии:
*Main> let s = "This miscellaneous items are starting to get shitty ."
*Main> putStr $ f 22 s
This miscellaneous
items are starting
to get shitty .
Любые идеи?
Какова цель 'take (length s) s ++" \ n "', когда вы могли бы просто выполнить 's ++" \ n "'? – rubik