我有一个用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)
答案 0 :(得分:9)
重点是:
(key:_) <- getArgs
在这里你明确地忽略了除第一个参数之外的所有内容。
如果redact函数需要一个关键字列表,你可以直接通过getArgs获得的整个参数列表:
keys <- getArgs
let result = redact text keys
请注意,这样,您的编辑功能实际上变得容易一些,因为您不必拆分单词。 此外,整个程序变得更安全,因为在没有给出参数时它不会中止。