2014-09-18 3 views
-3

굿 데이,나무 유형 간 변환 (하스켈)

학교 과제물을 작성하려면 매우 간단한 프로그램을 작성해야합니다. 한 유형에서 다른 유형으로 나무를 변환해야합니다. 그러나 나는 강의에 참석할 수 없어 내 코드가 무엇이 잘못되었는지 전혀 몰랐기 때문에 난처한 상황에 처해있다. 할당은 RoseTree에 형 Tree1a에서 나무를 변환하는 것입니다 :

data RoseTree = RoseNode String [RoseTree] 
data Tree1a = Leaf1a Number | Node1a Number Tree1a Tree1a 

tree = Node1a 1 (Leaf1a 2) 
       (Node1a 3 (Leaf1a 4) 
          (Leaf1a 5)) 

pp1a :: Tree1a -> RoseTree 
pp1a (Leaf1a n)   = RoseNode (show n) [] 
pp1a (Node1a n left right) = RoseNode (show n) [pp1a left, pp1a right] 

(. 수 교사에 의해 주어진 라이브러리에 정의되어 있지만, 여기에 문제가되지 않습니다)하지만이 작동하지 않습니다 showTree (pp1a tree)를 실행하면 아무 일도 일어나지 않고 그냥 영원히 실행됩니다 (showTree는 선생님이 지정한 일부 라이브러리에서 RoseTree에 정의 된 인쇄 함수입니다).

+1

오류는 다른 곳에서 발생해야합니다. 주어진 테스트 트리가 무한 재귀를 일으켜서는 안됩니다 (다른 유한 트리도 마찬가지입니다). – Sarah

답변

0

deriving ShowRoseTree 형식 서명에 추가하면 저에게 효과적입니다.

*Main> pp1a tree 
RoseNode "1" [RoseNode "2" [],RoseNode "3" [RoseNode "4" [],RoseNode "5" []]] 

내가 Int-Number을 변경했다하더라도,하지만 난이 만드는 큰 차이를 볼 수 없습니다!

+0

흠, 결국 효과가있는 것처럼 보입니다. 내가 뭔가 잘못되었다고 생각하는 이유는 콘솔 창에서 아무 일도 일어나지 않았기 때문이며, (비록 아직은 모르겠지만) 어떤 스크립트를 통해 html 파일에 그래픽으로 데이터를 표시하는 것입니다. 빠른 주석 달기 및 테스트 주셔서 감사합니다! – Knaapje

+1

@ user3316806 : 직접 문제를 해결할 수 있었다면 답을 추가하십시오. – Zeta

1

코드에 오류가 없습니다. 그 오류는 showTree 기능이 무엇을했는지 정확히 인식하지 못하고 있었는데, 예상했던대로 콘솔에 출력하지 못했습니다.