haskell中修订程序中的多个参数
我有一个用haskell编写的功能齐全的编校程序。它用start替换您输入的所有单词。但是,我对命令行参数有一个问题。 如果您键入: cat poem.txt |编辑文字1文字2文字3 它只编辑单词1 如果你写信 cat poem.txt |编辑文字1文字2文字3 它编辑了所有3个单词…这可能是我在命令行参数上犯的某种错误…这是我的代码haskell中修订程序中的多个参数,haskell,functional-programming,Haskell,Functional Programming,我有一个用haskell编写的功能齐全的编校程序。它用start替换您输入的所有单词。但是,我对命令行参数有一个问题。 如果您键入: cat poem.txt |编辑文字1文字2文字3 它只编辑单词1 如果你写信 cat poem.txt |编辑文字1文字2文字3 它编辑了所有3个单词…这可能是我在命令行参数上犯的某种错误…这是我的代码 module Main where import System import Data.Char import Data.Bits convertWord
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
请注意,通过这种方式,您的编校功能实际上变得更容易一些,因为您不必拆分单词。
此外,整个程序会变得更安全,因为它不会在没有参数的情况下中止。关键是:
(key:_) <- getArgs
在这里,除了第一个参数,您明确地忽略了所有内容
如果编校函数将获取一个关键字列表,则只需传递从getArgs获得的整个参数列表:
keys <- getArgs
let result = redact text keys
请注意,通过这种方式,您的编校功能实际上变得更容易一些,因为您不必拆分单词。
此外,整个程序会变得更安全,因为它不会在没有参数的情况下中止。非常感谢,这完全有道理…我更改了它,它工作得很好。非常感谢,这完全有道理…我更改了它,它工作得很好。