는 다음과 같이 정의 쿼드 트리을 상상해 :Quadtrees에 기록 할 패턴 일치가 너무 많습니까?
data (Eq a, Show a) => QT a = C a | Q (QT a) (QT a) (QT a) (QT a)
deriving (Eq, Show)
bad1 = Q u u u u where u = C 255
bad2 = Q (C 0) (C 255) (Q u u u u) (C 64) where u = C 255
생성자는 그렇지 잘 형성 쿼드 트리를 만들 수 있습니다. bad1
은 단순히 C 255이어야하며 같은 이유의 오른쪽 하단 쿼드 트리가 (이 Q (C 0) (C 255) (C 244) (C 64)
해야 너무 때문에 bad2
가 유효하지 않습니다.
지금까지 너무 좋아. 그 잘 formness를 확인하는 것은 단순히 문제의 . 모든 내부 쿼드 트리가 잎이 때 내부 쿼드 트리 반복적으로 기본 케이스는 모든 색상이 모두 동일해서는 안된다,이다
wellformed :: (Eq a, Show a) => QT a -> Bool
wellformed (Q (C c1) (C c2) (C c3) (C c4)) = any (/= c1) [c2, c3, c4]
wellformed (Q (C c1) (C c2) se (C c4)) = valid se
-- continue defining patters to match e.g Q C C C, C Q Q C, and so on...
질문 :. 나는 모든 possi에 대한 모든 경기를 입력 방지 할 수 있습니다 leafs와 quadtrees의 표식 조합?
나의 질문은 매우 이상한 경우 환자 수 있지만 내 두 번째 날 - 하스켈 - 원활한-learing 제발!
는 관심있는 내용에 따라, 당신은 단지 모든 네 가지 요소가 동일하고 하나의 요소로 만들어 버리는 "나쁜"사건을 감지하는'unify' 기능을 만들 수 있습니다. –
@ 단 : 이미 해냈습니다. 나는 "살균"라고 당신이 언급 한 바와 같이 동일 않습니다 : P – gremo
또한 모듈 외부에서'Q' 생성자를 숨기고, 확실히 모든 것이 잘 형성되어 있는지 확인하기 위해 스마트 생성자를 사용할 수 있습니다. – rampion