2013-03-24 5 views
2

data Tree a = Leaf a | Node (Tree a) (Tree a)하스켈

에 트리를 통해 압축 기능을 정의하는 방법을 나는 하스켈 zipzipWith 기능 트리 버전을 작성하는 방법을 알아낼 수 없습니다.

+8

당신은 무엇을 시도 했습니까? – Carl

+1

나무가 합쳐져야합니까? – pat

+0

당신은 haskell이 매우 관련성이 높은 장을 가지고 있습니다 : http://learnyouahaskell.com/zippers –

답변

5

귀하의 나무는 잘 형성된 빈 나무를 허용하지 않습니다 - 당신은 변덕스러운 나무를 만들 수 있습니다 Node undefined undefined하지만 이것은별로 좋지 않습니다. 다른 사람들이 심플한 트리를 주석 처리 한 것처럼, "좋은"결과를 얻으려면 두 모양이 모두 같은 모양이어야합니다. (모양이 자릅니다 일치하지 않는 경우) 하찮은 나무을 압축 모양이 아니라 "길이"에 잘립니다

zipTree :: Tree a -> Tree b -> Tree (a,b) 
zipTree (Leaf a)  (Leaf b)  = Leaf (a,b) 
ZipTree (Node l1 r1) (Node l2 r2) = 
    let l = zipTree l1 l2 
     r = zipTree r1 r2 
    in Node l r 

-- Problems... 
zipTree (Node _ _) (Leaf _) = Node undefined undefined 
ZipTree (Leaf _) (Node _ _) = Node undefined undefined 

주 -이 (엄밀히 말하면 목록을 잘라 않습니다 "길이에"잘라 내기 목록보다 더 심각 "모양"은 항상 같아야합니다).

트리 라이브러리를 작성하는 경우 이런 이유로 zipTree를 정의하지 않습니다.