2
data Tree a = Leaf a | Node (Tree a) (Tree a)
하스켈
에 트리를 통해 압축 기능을 정의하는 방법을 나는 하스켈 zip
및 zipWith
기능 트리 버전을 작성하는 방법을 알아낼 수 없습니다.
data Tree a = Leaf a | Node (Tree a) (Tree a)
하스켈
에 트리를 통해 압축 기능을 정의하는 방법을 나는 하스켈 zip
및 zipWith
기능 트리 버전을 작성하는 방법을 알아낼 수 없습니다.
귀하의 나무는 잘 형성된 빈 나무를 허용하지 않습니다 - 당신은 변덕스러운 나무를 만들 수 있습니다 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를 정의하지 않습니다.
당신은 무엇을 시도 했습니까? – Carl
나무가 합쳐져야합니까? – pat
당신은 haskell이 매우 관련성이 높은 장을 가지고 있습니다 : http://learnyouahaskell.com/zippers –