我有运动建议从区别联合列表中加入相同类型的每个值的函数,如:
type volume =
| Litre of float
| Galon of float
| Bucket of float
| Bushel of float
let list = [Litre(20.0);Litre(30.0);Galon(2.0);Bucket(5.0);Litre(5.0);Galon(3.0)];
Run Code Online (Sandbox Code Playgroud)
输出应该如下所示:
[Litre(55.0);Galon(5.0);Bucket(5.0)]
Run Code Online (Sandbox Code Playgroud)
我已经找到了部分解决方案:
let rec sumSameTypes (list:volume list) =
match list with
| a::b::t -> if a.GetType() = b.GetType() then // and there is part where I don't know how to sum two of these elements
| [] -> failwith "EMPTY"
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的歧视联盟树:
type rbtree =
| LeafB of int
| LeafR of int
| Node of int*rbtree*rbtree
Run Code Online (Sandbox Code Playgroud)
我要做的是搜索树中的每个LeafB,所以我带来了这个递归函数:
let rec searchB (tree:rbtree) : rbtree list =
match tree with
| LeafB(n) -> LeafB(n)::searchB tree
| LeafR(n) -> []
| Node(n,left,right) -> List.append (searchB left) (searchB right)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试测试它时,我得到堆栈溢出异常,我不知道如何修改它以正常工作.