2016-09-13 3 views
1

나는 내 자신의 데이터 형식을 만들었습니다. 그리고 목록의 해당 데이터 형식에있는 모든 숫자의 합계를 만들려고합니다. 나는 어떤 F 번호 라이브러리F # 목록 목록 합계

내 데이터 타입

type elist = A | L of int * elist 

나는 F 번호에 초보자과에 머리를 파악하기 위해 노력하고있어를 사용하지 않습니다. 나는 이것을 재귀 적으로하고 싶다. 내 생각에 들어가면 목록의 끝으로 이동하여 합계를 시작하고 앞쪽으로 돌아가서 각각을 추가하는 것입니다.

예 :

let l = L(4, L(3, L(6, L(3, A)))) 

val it : int 16 

을 반환해야하는 것은 여기에 내 코드이고 나는 그것이 잘못 알고

let rec sum l = 
    let a = 0 
    match l with 
    | A -> 0 
    | L(head,A) -> head 
    | L(head,tail) -> sum tail + a 
+0

http://stackoverflow.com/q/39461659/126014 및 http://stackoverflow.com/q/39462259/126014와 거의 비슷합니다. 숙제가 거의 확실합니다. –

답변

3

당신은 거의 다 왔어. 필요에 따라 l = L(4, L(3, L(6, L(3, A))))

val it : int = 16 

를 제공 할 때

let rec sum l = 
    match l with 
    | A -> 0 
    | L(head,A) -> head 
    | L(head,tail) -> head + sum tail 

그런 sum l 평가 : 당신이 필요로하는 모두는 a 잃을 것입니다.

+0

감사합니다. @ RobLyndon. 목록의 n 번째 요소를 찾으려면 코드가 어떻게 다른가요? – user2744489

+1

'let rec 요소를 출력한다. l n = | (l, n)을 | (A, _) -> "범위를 벗어남"과 함께 실패 | (L (head, A), k) k> 0 일 때 "범위 초과"| (L (헤드, A), 0) -> 헤드 | (L (머리, 꼬리), 0) -> 머리 | k> 0 일 때 요소 테일 (k-1)'(L (head, tail), k) –