テキストを長方形の形にフォーマットしようとしています。現在、適切に左揃えにすることができましたが、最後の行は可能な限り延長されていません。
これを最小化または完全に削除するために、最適なフィールド幅を計算しようとしています。
私は完全に立ち往生しています。以下のコードは、関連する機能を示しています。現時点では、無限ループに陥っています。どこが間違っているのですか?
ちなみに、Haskellコードをデバッグする最良の方法は何ですか?(はい、私はこれに非常に慣れていません。)
optimalFieldWidthは、一番上の行の長さが一番下の行の長さと等しくなるまで行の長さを比較し、次にこれを真にするフィールド幅を返すことになっています。
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
すべての回答をいただければ幸いです。ありがとうございました。