Haskell中的一个编译程序中的多个参数

问题描述:

我有一个用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) 

问题是这样的:

(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