我试着为mergesort写一个尾递归代码.代码编译并运行.但是,输出是错误的.它只输出一个整数.我想知道如何修复此代码,以便整数列表被排序和输出.
let rec merge L L2 P =
match L, L2 with
| [], [] -> P
| [], _ -> L2
| _, [] -> L
| hd::t1, hd2::t2 ->
if hd <= hd2 then
merge t1 L2 (P @ [hd])
else
merge L t2 (P @ [hd2])
//
// mergesort:
//
let rec ms L =
match L with
| [] -> []
| e::[] -> L
| _ ->
let mid = List.length L / 2
let …Run Code Online (Sandbox Code Playgroud) 有人可以告诉我如何在列表包含特定号码时过滤掉列表.例如,如果子列表包含2,那么我想要第三个值.
let p = [ [0;2;1]; [7;2;5]; [8;2; 10]; [44; 33; 9]]
//Filtered List: [1;5;10]
let q = p |> List.filter(fun((x,y):int List) (List.item 2 x) = 1, (List.item 3 y))
Run Code Online (Sandbox Code Playgroud)
上面是我的代码到目前为止.我知道它的错误,但似乎无法在代码中弄明白.
我将如何通过索引过滤掉列表?列表:[400; 5; 401; 6; 403; 7] 过滤列表:[5; 6; 7;]
我想过滤掉奇数索引号。所以我可以比较这些值,然后打印出最大值。
如果我想复制列表中的元素,我将如何进行并执行此操作?我在考虑以下几点:
let List = [(1,2);(3,4)]
let v = List.map(fun (x,y) -> List.replicate 2 (x,y)) List
Run Code Online (Sandbox Code Playgroud)
我希望结果是[(1,2); (1,2); (3,4); (3,4)].任何建议将不胜感激.如果可能的话,我想只使用更高的顺序.
f# ×4