2012-03-27 46 views
1

我有一個用haskell.it編寫的全功能編輯程序替換了您用starts輸入的所有單詞。但是我遇到了命令行參數的問題。 如果您輸入:Haskell中的一個編譯程序中的多個參數

cat poem.txt |纂輯字詞1字詞2 WORD3

它只是重新編輯字1

,如果你寫

貓一下poem.txt |纂輯「字詞1字詞2 WORD3」

它重新編輯的所有3個字......這可能是某種錯誤,我沒有用命令行參數的...這裏是我的代碼

module Main where 

import System 
import Data.Char 
import Data.Bits 

convertWord :: Eq a=> [a] -> String 
convertWord = map (const '*') 

lowercase :: [Char]->[Char] 
lowercase ch = map toLower ch 

redact :: String -> String -> String 
redact text keywords = unlines(map unwords redactedtext) 
     where redactedtext = map processed text1 
       text1  = map words (lines text) 
       processed = map tobeconverted 
       keywords1 = words keywords 
       tobeconverted x | lowercase x `elem` map lowercase keywords1  = convertWord x 
           | otherwise          = x 


main = do 
    text <- getContents 
    (key:_) <- getArgs 
    let 
      result = redact text key 




    putStr (result) 

回答

9

問題是這樣的:

(key:_) <- getArgs 

這裏您明確地忽略了除第一個參數之外的所有內容。

如果編校功能將採取關鍵字的列表,你可以只通過參數的整個列表,你從getArgs得到:

keys <- getArgs 
let result = redact text keys 

注意,這樣,你的編校功能實際上變得更容易一點,因爲你不必分詞。 此外,你整個程序變得更安全,因爲當沒有參數給出時它不會中止。

+0

非常感謝你,這使得總體感......我改變了它,它工作正常。 – user1295012 2012-03-27 09:14:45

+0

你應該標記爲接受他的答案然後:) – 2012-03-27 09:32:18