저는 haskell에 새로운 오류입니다.이 스크립트를 작동시키는 데 상당한 어려움을 겪고 있습니다. 의도는 명령 행에서 arguements를 읽고 별도의 텍스트 파일에서 찾아내는 것입니다. 이 단어들은 그 단어의 길이와 같은 양의 별표로 대체됩니다. 나는 그 단어를 대체하기 위해 그것을 얻을 수 있었지만 그 이후로 벽에 부딪쳤다. 나는 모든 것을 시도해 보았고 누군가가 나를 위해 그것을 명확히 할 수 있기를 희망했다.텍스트 파일에서 단어 찾기 및 바꾸기
module Main where
import System
import Data.Char
lowercase = map toLower
main = do (arg1:arg2:arg3:arg4:arg5:_) <- getArgs
txt <- getContents
putStr (redact txt arg1 arg2 arg3 arg4 arg5)
redact file w1 w2 w3 w4 w5 = unlines [ process line | line <- lines file ]
where process line = unwords [ f word | word <- words line ]
f w | lowercase(w) == lowercase(w1) = convertWord w 1
| lowercase(w) == lowercase(w2) = convertWord w 1
| lowercase(w) == lowercase(w3) = convertWord w 1
| lowercase(w) == lowercase(w4) = convertWord w 1
| lowercase(w) == lowercase(w5) = convertWord w 1
| otherwise = w
convertWord :: Eq a => [a] -> [a] -> [a] -> [a]
convertWord [] _ = []
convertWord word count = temp
where if count == 1 then let temp = ""
if count <= length(word)
then temp = temp ++ "*"
convertWord word count+1
아이디어는 convertWord 부분이라는 것을 보여 주며, 출력에 표시하는 편집하다 다시 공급하는 별표 문자열을 생성한다. 내가이 컴파일 할 때 그러나, GHC 오류 "redact.hs을 : 28 : 13 : 오류 (아마도 잘못된 들여 쓰기) 구문 분석"반환하는 모든 도움에 미리
감사를 당신이
톰
을 제공 할 수 있습니다
한 가지 힌트는 코드에서 코드 중복을 피하려고합니다. 소문자 (w) == 소문자 (w1) = convertWord w 1 '을 모두 하나의 것으로 변환 할 수있는 방법에 대해 생각해보십시오. 절대 코드를 복사하지 않는 것이 좋습니다. :) – Tarrasch
예를 들어, 다음과 같이 할 수 있습니다 :'소문자 w \'elem \'소문자 맵 [w1, w2, w3, w4, w5] – fuz