【发布时间】:2019-02-07 13:56:27
【问题描述】:
在介绍了 f# 中的预定义数据类型(即列表)以及如何对列表或序列的元素求和后,我试图了解如何使用用户定义的数据类型。假设我创建了一个数据类型,称之为 list1:
type list1 =
A
| B of int * list1
地点:
- A 代表空列表
- B 通过在另一个列表前面添加一个 int 来构建一个新列表
所以 1,2,3,4,将用 list1 值表示:
B(1, B(2, B(3, B(4, A))))
从 wikibook 中我了解到,使用列表我可以通过以下方式总结元素:
let List.sum [1; 2; 3; 4]
但是如何对用户定义的数据类型的元素求和呢?任何提示将不胜感激。
编辑:我可以利用匹配运算符:
let rec sumit (l: ilist) : int =
match l with
| (B(x1, A)) -> x1
| (B(x1, B(x2, A))) -> (x1+x2)
sumit (B(3, B(4, A)))
我明白了:
val it : int = 7
我怎样才能做到,如果我有超过 2 个整数,它仍然对元素求和(即 (B(3, B(4, B(5, A)))) 得到 12?
【问题讨论】:
标签: f# functional-programming f#-interactive