F#列表的和

F#列表的和,f#,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 =

我创建了自己的数据类型,并试图创建该数据类型中所有数字的总和,即列表列表。我不想使用任何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

你快到了。您只需丢失
a

let rec sum l = 
   match l with
   | A -> 0
   | L(head,A) -> head 
   | L(head,tail) -> head + sum tail
然后,当
l=l(4,l(3,l(6,l(3,A)))时,计算
sum l

val it : int = 16

根据需要。

谢谢@RobLyndon。如果我想找到列表l的第n个元素,我的代码会有什么不同?
让rec元素ln=将(l,n)与|(A,|)->当k>0时失败与“超出范围”|(l(head,A),0)->head |(l(head,tail),0)->head |(l(head,tail),k)当k>0元素尾部(k-1)时
与家庭作业类似,几乎可以肯定。