【发布时间】:2012-02-21 17:27:24
【问题描述】:
我有这两个功能
//Remove all even indexed elements from a list and return the rest
let rec removeEven l =
match l with
| x0::x1::xs -> x1::removeEven (xs)
| [] -> []
| [_] -> []
//combine list members into pairs
let rec combinePair l =
match l with
| x0::x1::xs -> (x0,x1) :: combinePair(xs)
| [] -> []
| [_] -> []
那工作。
但我现在想,我还不如学习一点关于尾递归的知识,我很难掌握它。
这就是为什么我认为如果我可以得到一些帮助来制作我自己的尾递归函数,也许它会变得更清楚它是如何工作的,而不是阅读我可能不理解的地方的示例以及我自己的代码(请记住,我是一个完整的 f# 新手 :))
当然欢迎任何其他关于我的代码的建设性 cmets!
【问题讨论】:
-
我认为是正确的。它应该删除偶数索引,而不是偶数元素,在这种情况下,1 具有索引 0,2 具有索引 1
-
为什么
removeEven [1;2]返回[2]?我在回答中复制了它的行为,但它似乎应该被称为returnEven或removeOdd或其他名称。 -
抱歉删除我的评论。我改写了。那么 even 指的是索引吗?好的。
-
@Daniel :代码顶部的注释一直都这么说。 ;-]
-
@ildjarn:谁读代码 cmets?!? :-)
标签: list recursion f# tail-recursion