Я пытаюсь отформатировать текст в форме прямоугольника; в настоящее время я смог правильно выровнять его по левому краю, но последняя строка не простирается настолько далеко, насколько это возможно.
Я пытаюсь рассчитать оптимальную ширину поля, чтобы минимизировать или полностью удалить ее.
Я полностью застрял. Код ниже показывает соответствующие функции. На данный момент он застрял в бесконечном цикле.
Куда я иду не так?
Кстати, какой лучший способ отладки кода на Haskell?
(Да, я очень новичок в этом.)
optimFieldWidth должен сравнивать длины строк до тех пор, пока длина верхней строки не будет равна длине нижней строки, а затем возвращать ширину поля, что приводит к истинности этого значения.
module Main where
import System
import Data.List
main = do
(f:_) <- getArgs
xs <- getContents
putStr (show (bestFieldWidth maxLineLength xs))
bestFieldWidth :: Int -> String -> Int
bestFiledWidth _ [] = 0
bestFieldWidth lineLength xs
| length (last input) == length (head input) = lineLength
| otherwise = bestFieldWidth (length (head (rect (lineLength-1) xs))) xs
where input = lines xs
rect :: Int -> String -> [String]
rect _ [] = []
rect lineLength xs
| length input <= len = [input]
| otherwise = take len input : rect len (drop len input)
where input = trim xs
len = bestFieldWidth lineLength xs
maxLineLength :: Int
maxLineLength = 40
Все ответы приветствуются. Спасибо.