2013-10-25 4 views
0

내 특수 유형에 저장할 수있는 값 목록을 합한 함수를 작성하려고합니다. |사용자 정의 유형을 일반 목록 인 것처럼 합계합니다. F #

내 타입은 INT의

형 intnest = INT처럼 보인다 인트네스트리스트의리스트 ;;

내 요약을 할 아래의 코드를 사용하려고 시도하고

let rec regularsum list = 
    match list with 
    | head :: tail -> head + regularsum tail 
    | [] -> 0 

let addup lt = 
    match lt with 
    | INT -> lt 
    | LIST ->regularsum lt 

가 내 사용자 정의 유형이 요소가 요약 할 수 있습니다 (내가 원하는 addup 유형 intnest를 반환)? 그렇다면이를 달성하기 위해 어떻게 코드를 변경해야합니까? 또는 다음에 무엇을 시도해야합니까?

+4

난 당신이 정말 그렇게하는 대신 질문입니다 같은 거대한 배치를 게시의 문서를 읽을 필요가 생각하는 고차 함수를 사용하는 것입니다 - HTTP 여기 참조 : //msdn.microsoft.com/en-us/library/dd233226.aspx –

답변

2

그래서이 작업을 수행하는 가장 좋은 방법은

let rec addup l = 
    match l with 
    |INT(_) -> l 
    |LIST(li) -> 
     INT(
      li 
      |> List.map (addup) 
      |> List.fold (fun s t -> match t with |INT(a) -> s+a | _ -> failwith "bad error") 0) 
관련 문제