2012-06-29 3 views
2

하스켈 코드 작성을위한 들여 쓰기 규칙은 어디에서 얻을 수 있습니까?haskell의 들여 쓰기 규칙 전체 집합

위의 질문과 비슷한 과거의 질문을 통해 위에 질문하게되었습니다. 오류 메시지의 원인은 다음과 같습니다. parse error on input 'something'?

오류 메시지 내가 가지고 :

baby.hs가 : 103 : 2 : 입력 '으로 myList'(이 줄 오류)

코드에 오류를 구문 분석 I 컴파일하려고 :

Optimight에 의해
myList = ["aeroplane", "Aeroplane", "AeRoPlAne", "helicopter", "HELICOPTER", "Zebra"] 
quicksort :: (Ord a) => [a] -> [a] 
quicksort [] = [] 
quicksort (x:xs) = 
let smallerSorted = quicksort [a | a <- xs, a <= x] 
biggerSorted = quicksort [a | a <- xs, a > x] 
in smallerSorted ++ [x] ++ biggerSorted 

편집 :

나는 새에 문제의 코드를 이동했다. hs 파일을 컴파일하고 컴파일하려고했습니다. 여전히 유사한 오류 메시지가 남아 있습니다.

오류
quickSort.hs : 5 : 62 : 아래의 세부 모듈은로드 '=' 실패 입력을 구문 분석 오류 : 없음. (0.02 초, 0 바이트) [A]

코드 퀵 :: (ORD의 a) => -> [A]
퀵 [] = [] 퀵 (X : XS) = smallerSorted하자 = quicksort [a | a < - xs, a < = x]
biggerSorted = quicksort [a | x 비행기, 비행기, 헬리콥터, 헬리콥터, 얼룩말, 지브라, xxx, xxx, xxx, xx, xx, y> xx, x> "미국은"]

+3

언어보고, 특히 http://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-210002.7 및 http://www.haskell.org/onlinereport/haskell2010/haskellch10 .html # x17-17800010.3 –

+0

103 행은'myList'를 정의하는 목록입니까? 선행 선은 무엇입니까? – dave4420

+0

@ dave4420 선생님, "Learn-you-a-haskell"에서 배워서 모든 코드 샘플을 같은 파일 즉 baby.hs에 보관하고 있습니다. 선행에는 해당 코드 샘플이 포함됩니다. – Optimight

답변

10

적어도 표준 하스켈에 대한 (언어 확장없이), 레이아웃 규칙은 귀하의 취향에 대한 약간의 공식적인 될 수있다

보고서 in Section 10.3 of the Haskell 2010 report.을 설명합니다. Haskell의 다양한 튜토리얼과 교과서에는 레이아웃 규칙에 대한 좀 더 비공식적 인 설명이 있습니다. 예를 들어, Haskell Wikibook.

오류 메시지는 103 행을 가리키고 있지만 몇 줄을 붙여야합니다. 적어도 let-in 구문의 들여 쓰기가 잘못되었음을 알 수 있습니다. 나는이 같은 단일 dolet를 작성하여이 문제를 방지하려면 제대로 쉬운 방법을 이해하면

xs = ["aeroplane", "Aeroplane", "AeRoPlAne", "helicopter", "HELICOPTER", "Zebra"] 
quicksort :: (Ord a) => [a] -> [a] 
quicksort [] = [] 
quicksort (x:xs) = let smallerSorted = quicksort [a | a <- xs, a <= x] 
         biggerSorted = quicksort [a | a <- xs, a > x] 
        in smallerSorted ++ [x] ++ biggerSorted 
+0

오류가 계속 발생합니다. xs 선언을 마지막 줄로 가져간 다음 오류 (입력 '='의 구문 분석 오류)를 줄로 옮겼습니다 : biggerSorted = quicksort [a | a <- xs, a > x] – Optimight

+0

@Optimight, 들여 쓰기 된 코드는 저에게 효과적입니다. 들여 쓰기에 탭이 아닌 공백을 사용하고 있습니까? – Heatsink

+0

@Heatsink 코드 작성을 위해 gedit을 사용하고 있습니다. 그리고 네, 탭을 사용하고 있지만 공백을 넣으려고합니다. – Optimight

2

:

fName = do 
    expression1 = ... 
    exp2 ... 

fName param = let 
    exp1 = ... 
    exp2 = ... 
    exp3 = ... 
    in ...  -- can be indented more if you want 
여기

홈페이지 포인트는 첫째 들여 쓰기 있다는 것입니다 당신은 다음과 같이 작성해야 exp1은 모든 새 라인에서 쉽게 발견하고 유지 관리 할 수 ​​있습니다.




그리고 여기 내 학습 시트에서 복사/붙여 넣기합니다. 별로 도움이되지 않지만 누군가를 도울 수 있습니다. 누군가가 틀린/틀린 것을주의하는 경우에 저를 정정하십시오.

탭 또는 공백은 {com1; com2}

오프사이어 규칙 : 소스 파일의 처음 부분에서 첫 번째 최상위 레벨 선언 또는 정의는 모든 열에서 시작할 수 있습니다. 모든 후속 최상위 레벨 선언은 동일한 들여 쓰기를 가져야합니다!

LET IN, 다음 토큰의 들여 쓰기를 기억합니다. 빈 줄 또는 들여 쓰기가 더 오른쪽에 있으면 이전 줄을 계속합니다. 동일한 들여 쓰기 인 경우 동일한 블록에서 새 항목의 시작입니다.

승리 탭 4 spc, 유닉스 탭 8 공백 탭 대신 공백을 사용하십시오!

line1... 
    continue line 1 -- as long it doesn't start at same indent as line1 
    3spaces would indicate block with line 1! 
    line4 same block 
    same indent is same line1 block 
    all indents for BLOCK must be same. 

line8... -- is new block and end of line1 block 
    positon of first column in block is start 

line 1 
cont line1 
    cont line 1 
    cont line 1 
    block1 -- would be cont line 1 
    block1 -- if not for this block1 at same indent 


Bad way: 
do 
    action0 
    if condition 
    then action1 
    else action2 
    action3 

Good way: 
do 
    action0 
    if condition 
    then action1 
    else action2 
    action3