我正在尝试向函数中输入一个列表,它向我发送了一个列表,其中包含使用下面的递归使用f#删除的元素的前半部分,但是我一直遇到我无法弄清的基本情况问题。有什么想法吗?我正在使用第二个阴影列表来计算我需要走多远,直到我进入列表的一半为止(一次删除两个元素)
let rec dropHalf listToDrop shadowList =
match shadowList with
| [] -> listToDrop
| shadowHead2::shadowHead1::shadowTail -> if shadowTail.Length<=1 then listToDrop else
match listToDrop with
|[] -> listToDrop
|listToDropHead::listToDropTail -> dropHalf listToDropTail shadowTail
最佳答案
let rec dropHalf listToDrop shadowList =
match shadowList with
| [] -> listToDrop
| shadowHead2::[] -> listToDrop (* odd number! *)
| shadowHead1::shadowHead2::shadowTail ->
match listToDrop with
| [] -> listToDrop (* should never happen? *)
| listToDropHead::listToDropTail -> dropHalf listToDropTail shadowTail
恐怕我不使用F#,但是它类似于ocaml,因此希望以下内容与您要查找的内容接近(也许注释格式已更改?!)。这个想法是,当您耗尽阴影时,您就完成了。您的代码几乎就在那儿,但是测试阴影尾部的长度没有意义。
我想强调一点,这并不是像任何人都可以在“现实生活中”写的东西,但是听起来您正在与一些奇怪的要求作斗争。