Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中修订程序中的多个参数_Haskell_Functional Programming - Fatal编程技术网

haskell中修订程序中的多个参数

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

我有一个用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 :: 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
请注意,通过这种方式,您的编校功能实际上变得更容易一些,因为您不必拆分单词。
此外,整个程序会变得更安全,因为它不会在没有参数的情况下中止。

非常感谢,这完全有道理…我更改了它,它工作得很好。非常感谢,这完全有道理…我更改了它,它工作得很好。