小编Jac*_*ski的帖子

区分联合列表F#的两个值的总和

我有运动建议从区别联合列表中加入相同类型的每个值的函数,如:

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)

f# discriminated-union

4
推荐指数
1
解决办法
202
查看次数

如何在这个F#程序中避免堆栈溢出(递归树搜索)?

我有一个像这样的歧视联盟树:

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)

但是,当我尝试测试它时,我得到堆栈溢出异常,我不知道如何修改它以正常工作.

f#

3
推荐指数
1
解决办法
126
查看次数

标签 统计

f# ×2

discriminated-union ×1