2012-03-22 4 views
1

私はここで練習をしていたhttp://book.realworldhaskell.org/read/functional-programming.html。私がテキストファイルを転置する必要がある問題に対する私の解決策は、CPU時間がかかるようです。可能であれば、アルゴリズムを以下のように改善して、CPUの空き領域を少なくします。ハスケルでのテキストファイルの転置

import System.Environment (getArgs) 
import Data.Char(isAlpha) 
interactWith function inputFile outputFile = do 
    input <- readFile inputFile 
    writeFile outputFile (function input) 

main = mainWith myFunction 
    where mainWith function = do 
      args <- getArgs 
      case args of 
      [input,output] -> interactWith function input output 
      _ -> putStrLn "error: exactly two arguments needed" 

     -- replace "id" with the name of our function below 
     myFunction = transpose 

transpose :: String -> String 
transpose input = tpose (lines input) 

tpose [] = [] 
tpose xs = concat (map (take 1) xs) ++ "\n" ++ tpose (map (drop 1) xs) 

答えて

1

Data.Listモジュールは、transpose :: [[a]] -> [[a]]などのいくつかの有用な機能を含んでいます。また、String[String](改行を改行する)の間で変換するにはlinesunlinesがあります。

だから基本的に、あなたはおそらく

main = do 
    [input,output] <- getArgs 
    interactWith (unlines . transpose . lines) input output 
+0

これは速くなりますか? –

2

のようなものは、文字列のデータ型がどのように効率の悪いの話、そして代わりにバイト文字列使用することを提案している章8、までスキップします。あなたのファイルがユニコードなら、Data.Textもあります。