2014-11-27 6 views
0

하스켈 사용자 입력에서 처음 세 요소를 가져오고 싶지만 오류 메시지가 나타납니다.하스켈 분할 사용자 입력

getCmd cmd = do 
    putStrLn (take 3 cmd) 

기능을 응용 프로그램이 왼쪽 연관되어 있으므로 정의

(((putStrLn take) 3) cmd) 

으로 분석됩니다 그래서 당신이 필요합니다 : 는 getCmd 귀하의 정의해야

getCmd cmd = do 
    putStrLn take 3 cmd 

main = do 
    putStrLn "please type something" 
    name <- getLine 
    if name /= "QUIT" then do 
     getCmd(name) 
     main 
    else 
     return() 
+1

당신은 항상 당신의 오류 메시지를 게시해야 정의 할 수 있도록 do의 사용은 중복입니다. 에 관계없이, 당신은 자바 또는 C처럼 입력하고 있습니다. 예를 들어,'getCmd (name)'을'getCmd name'으로 대체하십시오 ... – Arnon

+4

'getCmd'의 본문을'putStrLn $ 3 cmd'를 가져 가라. – Lee

+0

@Lee 안녕하세요, 저는 haskell에 새로 왔습니다. "$"의 의미는 무엇입니까? 감사합니다 – galaxyan

답변

3

도움을 주셔서 감사합니다 대괄호를 추가하여 take을 적용한 결과에 putStrLn이 적용됩니다.

하스켈도 함수 응용 프로그램보다 우선 순위가 낮은 $ 중절 연산자를 정의하므로 대괄호를 사용하는 대신 일반적으로 사용됩니다. 당신이 getCmd

getCmd cmd = putStrLn $ take 3 cmd 

또는

getCmd = putStrLn . take 3 
+2

또 다른 개선점은'else' 브랜치에서'return()'을 사용하는'if'와 같이'Control.Monad'에서'when'을 사용하는 것입니다. – nponeccop