F#编辑列表的功能

时间:2017-01-31 18:34:08

标签: list f#

我正在尝试实现一个带有元素和列表的函数,并删除所述元素。

这不会产生输出,我不知道为什么。我是F#的新手,所以我很可能犯了一个基本的错误。请注意,我正在尝试使用递归来执行此操作。

2 个答案:

答案 0 :(得分:3)

我不知道你问题的意图是什么,是真的删除还是在列表上写一些递归函数。

获得所需内容的最简单方法是:

let remove item lst = List.filter (fun x -> x <> item)

即:过滤掉所有与您的项目相同的元素

这有帮助吗?

答案 1 :(得分:3)

试试这个。

let rec remove item lst =
    let rec removeInner item lst acc =
       match lst with
       | h::tl when item = h -> removeInner item tl acc
       | h::tl -> removeInner item tl (h::acc)
       | []    -> List.rev(acc)
    removeInner item lst []

[<EntryPoint>]
let main argv = 

    let result = remove 2 [1;2;2;3;4;2]
    printfn "%A" result

    0
  

这不会产生输出,我不知道为什么。

您的版本未生成输出的原因是由于此行

| []    -> []

它读取:当列表为空时返回一个空列表。

您需要做的是累积未删除的值并返回累计值作为结果。

对于启动器,使用带F#的累加器是典型的,并使用此行创建。

removeInner item lst []

最后的[]是累加器,这是一个空的列表,因为你还没有添加任何内容。

然后,随着您的进步,您将使用此行添加

| h::tl -> removeInner item tl (h::acc)

最后你反转累加器中的值并用此行返回

| []    -> List.rev(acc)