2014-03-29 3 views
3

3 가지 유형의 이진 트리의 노드 수를 계산하는 재귀 함수를 작성해야하며 다음 유형의 결과를 저장하려고합니다. int * int * int 내 추론은 옳다.OCaml 언 바운드 값

type dtree = 
     Decision of string * int * dtree * string * int * dtree 
     | Chance of string * int * dtree * string * int * dtree 
     | Outcome of int 
;; 


let rec count dt = 
    match dt with 
      Decision(choiceL, costL, l, choiceR, costR, r) -> (x+1,y,z) count l count r 
     | Chance(eventL, probL, l, eventR, probR, r) -> (x,y+1,z) count l count r 
     | Outcome value -> (x,y,z+1) 

;; 

답변

1

코드에 많은 문제가 있지만 특정 질문을하면 더 좋을 수 있습니다. 시작할 장소와 마찬가지로 어디서나 정의하지 않고 x, yz이라는 이름을 사용하고 있습니다.

문제의 열쇠는 재귀 호출 count lcount r에 의해 반환 된 값에 이름을 지정해야한다는 것입니다. 이름을 지정하면 트리의 현재 수준에서 결과에 사용할 수 있습니다.

업데이트

여기 쌍의 목록에있는 값을 추가하는 기능입니다. 그것은 당신이 찾고있는 것과 동일한 거친 구조를 가지고 있습니다 :

+0

어떻게 함수를 정의 할 수 있습니까? – MMrj

+0

'let'을 사용하여 재귀 호출에 의해 반환 된 값에 이름을 지정하십시오. –