2014-07-22 2 views
-1

짧은 코드를 작성해야하는데, 하나의 사각형과 다른 부분이 겹치는 경우를 알아야합니다. 불행히도 Haskell은 짝이 맞지 않는 괄호에 대해 불평합니다.하스켈에서 짧은 훈련에 오류가 발생했습니다.

type Point -> (Double, Double) 
    type Rectangle -> (Point, Point) 
    overlaps:: Rectangle -> Rectangle -> Bool 
    overlaps ((x1,y1),(x2,y2)) ((a1,b1),(a2,b2))=(q>=w || t<=z) && (e>=r || u<=i) 
               where 
                  q=min(a1 a2) 
                  w=min(x1 x2) 
                  e=min(b1 b2) 
                  r=min(y1 y2) 
                  t=max(a1 a2) 
                  z=max(x1 x2) 
                  u=max(b1 b2) 
                  i=max(y1 y2) 

답변

4

type 별명이 =하지 -> 이루어집니다 정의 : 당신의 사람이 내 코드에서 짧은 모양을 가질 수 있다면 따라서, 나는 매우 감사하겠습니다.

type Point = (Double, Double) 

또한 인수를 함수에 전달하는 것은 fun arg1 arg2 arg3 ...입니다. min (a1 a2)를 작성

그래서 그런데

where q = min a1 a2 
     -- etc. 

실제로 인수 min를 작동하도록 그 결과를 공급하는 다음 인자에 a2a1 함수를 적용한 것을 의미한다. 이것은 a1이 함수가 아니기 때문에 오류로 이어질 것이며 min 두 인수를 제공하려고합니다. 당신의 서식 구타 보인다

type Point = (Double, Double) 
type Rectangle = (Point, Point) 

둘째 : 모든

4

먼저, 당신이 잘못 유형을 선언하고, 그들은 등호가 있어야합니다. 일관된 간격으로 다시 형식을 지정하고 이 아닌 탭을 사용하는 것이 좋습니다. 대신 공백을 삽입하도록 편집기를 구성하십시오. 문제는 탭 인덴 데이션 (indentations)이 발생한 날마다 다른 곳에서 게시물을 볼 수 있으므로 두통을 피하고 공백으로 전환하십시오. 하스켈 함수에 인수를 전달하지 사용 괄호를 않기 때문에 마지막으로

type Point = (Double, Double) 
type Rectangle = (Point, Point) 

overlaps :: Rectangle -> Rectangle -> Bool 
overlaps ((x1, y1), (x2, y2)) ((a1, b1), (a2, b2)) = (q >= w || t <= z) && (e >= r || u <= i) 
    where 
     q = min a1 a2 
     w = min x1 x2 
     e = min b1 b2 
     r = min y1 y2 
     t = max a1 a2 
     z = max x1 x2 
     u = max b1 b2 
     i = max y1 y2 

로 코드 포맷을 시도, 당신은 내가 당신의 min들과 max의에서 괄호를 제거 것을 알 수 있습니다,이입니다. 이것은 당신의 아버지의 C/C++/Java/C#/Python/뭐든 상관 없습니다. 하스켈은 인수를 공백으로 구분합니다. 괄호를 사용하여 더 복잡한 표현식을 인수로 넣을 수 있습니다 (예 :

max (x1 + x2) (y1 + y2) 
관련 문제