【发布时间】:2012-05-28 11:59:43
【问题描述】:
我正在尝试在函数中输入一个列表,它会向我发送一个列表,其中包含使用 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
【问题讨论】:
-
您选择实施是否有特定原因?有更简单、更简单的方法来获取给定列表的一半。
-
嗯,这是一个更大的任务中的一个小函数,整个事情都围绕着以函数式编程方式进行(我们都来自 c++ 背景)。所以我假设递归。
-
保留列表中的哪些元素以及丢弃哪些元素对您来说是否重要。
-
如果你可以使用库函数,只要找到长度,将它的一半。如果你不能,你可能仍然会发现实现最简单。显然,在做练习时,你有时必须做一些“奇怪”的事情来学习,但在实践中,我所描述的可能是大多数人会这样做的方式......但是我确实担心你可能会得到一些“更高水平”的部分你的运动错了。这似乎是一件奇怪的事情 - 丢弃了一半的数据。
-
我不适合分配。我知道这很奇怪,但我正在尝试以这种方式或其他与递归一起使用的方式来实现。事实上,她在课堂上暗示和影子复制的方式。
标签: recursion f# functional-programming