我正在尝试实现一个带有元素和列表的函数,并删除所述元素。
这不会产生输出,我不知道为什么。我是F#的新手,所以我很可能犯了一个基本的错误。请注意,我正在尝试使用递归来执行此操作。
答案 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)