2016-09-13 11 views
1

私は自分のデータ型を作成しました。リストのリストであるそのデータ型のすべての数値の合計を作成しようとしています。私はF#で初心者だし、その上に私の頭を把握しようとしているF#一覧リストの合計

type elist = A | L of int * elist 

マイデータ型

あらゆるF#ライブラリを使用する必要はありません。私はこれを再帰的にやりたい私の考えることは、リストの最後まで移動して合計を開始し、先頭に戻ってそれぞれを追加することです。

例:

val it : int 16 

を返す必要があります

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

はここに私のコードだと私はそれが間違っている知っている:

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。リストlのn番目の要素を探したければ、どのようにコードが違うのですか? – user2744489

+1

'let rec要素をln =(l、n)と一致させる| (A、_) - >「範囲外」で失敗する| k> 0-> failの場合(L(head、A)、k)、「範囲外」| (L(ヘッド、A)、0)→ヘッド| (L(ヘッド、テール)、0)→ヘッド| k> 0の場合、要素tail(k-1) ' –