F#列表的和
我创建了自己的数据类型,并试图创建该数据类型中所有数字的总和,即列表列表。我不想使用任何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 =
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)时
与家庭作业类似,几乎可以肯定。