haskell中的redact程序中的多个参数

时间:2012-03-27 08:55:09

标签: haskell functional-programming

我有一个用haskell编写的功能齐全的编辑程序。用start替换你输入的所有单词。但是我对命令行参数有问题。 如果您输入:

cat poem.txt | redact word1 word2 word3

它只会编辑word1

如果你写

cat poem.txt |编辑“word1 word2 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)

1 个答案:

答案 0 :(得分:9)

重点是:

(key:_) <- getArgs

在这里你明确地忽略了除第一个参数之外的所有内容。

如果redact函数需要一个关键字列表,你可以直接通过getArgs获得的整个参数列表:

keys <- getArgs
let result = redact text keys

请注意,这样,您的编辑功能实际上变得容易一些,因为您不必拆分单词。 此外,整个程序变得更安全,因为在没有给出参数时它不会中止。