f# - 反转列表然后添加新项目

标签 f#

我正在尝试学习 F#,并且我正在尝试创建一些简单的函数作为学习的一部分。

我创建了一个函数,可以将一个项目添加到列表中,然后反转结果。这在 Visual Studio 的 F# 交互式窗口中非常有效

let addThenReverse n list =
match list with
| [] -> []
| _ -> n::list |> List.rev

addThenReverse 0 [1;2;3]   //results in [3; 2; 1; 0]

但是我在编写一个函数来反转列表然后向其中添加项目时遇到了困难。

let reverseThenAdd n list =
    match list with
    | [] -> []
    | _ -> List.rev list |> n::list

reverseThenAdd 9 [1;2;3]  //desired result [3; 2; 1; 9]

编辑 上述的期望结果应该是 [9; 3; 2; 1]。发现这一点的人干得好!

第二个函数无法编译,我收到警告“This expression was expected to have type 'a list -> 'b list but here has type 'c list'”

我尝试的任何变体似乎都会导致其他编译错误。我假设(但不知道如何)我需要使用作为“List.rev list”的结果创建的新列表,也许是通过将它分配给一个变量。

最佳答案

问题是您将反向列表传递给连接表达式,这会抛出编译器。你应该这样做:

let reverseThenAdd n list =
    match list with
    | [] -> []
    | _ -> n :: (List.rev list)

reverseThenAdd 9 [1;2;3]  //desired result [3;2;1;9]

这意味着您要将 n 添加到 (List.rev list)

产生的列表中

关于f# - 反转列表然后添加新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42056633/

相关文章:

f# - Seq 模块中的聚合函数

c# - Scala,C# 等效于 F# 事件模式

f# - 通过模式匹配比较 F# 区分的联合实例

f# - 在 F# 中从 C# 格式化流利/方法链接代码

parsing - F# ref-mutable vars 与对象字段

f# - 是否可以覆盖 Collections.Seq 模块中的值?

f# - 静态成员可以重载吗?

visual-studio-2013 - F# 项目需要花费大量时间来构建

json - 通过 Json.Net 反序列化 F# Map

f# - 如何引用封装在单例区分联合中的元组的第一个元素