【发布时间】:2011-05-09 02:33:01
【问题描述】:
我正在尝试在 F# 中学习一些函数式编程的思维方式,因此我们不胜感激。现在我正在做一个简单的递归函数,它接受一个列表并返回第 i:th 元素。
let rec nth(list, i) =
match (list, i) with
| (x::xs, 0) -> x
| (x::xs, i) -> nth(xs, i-1)
函数本身似乎可以工作,但它会警告我模式不完整。在这种情况下,我不确定当我匹配空列表时会返回什么,因为如果我执行以下操作:
| ([], _) -> ()
整个函数被视为一个以单位为参数的函数。我希望它被视为一个多态函数。
当我在做这件事时,我不妨问一下,在认真开发时,在设计函数时检查有效参数的合理程度。我应该检查所有内容,以防止“滥用”该功能吗?在上面的示例中,我可以例如指定函数来尝试访问列表中大于其大小的元素。我希望我的问题不会太令人困惑:)
【问题讨论】:
标签: f# arguments pattern-matching unit-type