Мне было интересно, как я могу достичь:
Взяв первые n символов строки, затем ++
(объединив их с) отбросить эти первые n и взять следующие n и так далее (без сокращения слов). Я пробовал композицию функций и $
, но единственное, что я получаю, это ошибки.
ИЗМЕНИТЬ
Я пытаюсь выровнять текст слева для заданной ширины столбца (n), поэтому я стараюсь не сокращать слова, но если есть слово под номером n , просто возьмите несколько символов перед ним, а затем используйте \n для запуска снова для следующей строки. Мои основные проблемы до сих пор заключаются в проверке условия сокращения слов (я могу использовать !!
, но должен ли я использовать его в охранах с картой (-1) или как еще) и реализация рекурсии, потому что в качестве базы я получил
take n s ++ "\n" ++ take n (drop n s)
а также случай, когда n меньше самого длинного слова:
leftAlign n str = if n < ((maximum . map length . words) str) then "" else leftAlign n str
\n
, чтобы начать снова для следующего линия. - person Dimitar   schedule 14.06.2015take
иdrop
? - person jub0bs   schedule 14.06.2015" \t\n"
). Что ж, было бы интересно посмотреть на такую реализацию парсера, и я обратился кtake
иdrop
только потому, что это было очевидно. - person Dimitar   schedule 14.06.2015splitAt
. Также есть эквивалентная функция дляdropWhile
/takeWhile
. - person SwiftsNamesake   schedule 16.07.2017