定义第n个函数,它将整数,n和列表作为参数。应该返回从0开始索引的列表的第n个元素

时间:2017-02-26 02:56:40

标签: f#

这很容易,但我在新的F#中,仍然学习在F#中定义函数

我正在尝试定义第n个函数,它将采用整数n和列表作为参数。应该返回从0开始索引的列表的第n个元素。知道我该怎么办?提前致谢

例如:nth(3, [1,2,3,4,6])应该返回4

2 个答案:

答案 0 :(得分:2)

由于您在评论中已经解释过您只想了解它而不是使用内置函数,所以这是我的答案。

首先,您希望以严格的方式表达您的问题。在数学方面,如果你愿意的话。以下是我的方法:当n = 0时,结果是列表的第一项,对于任何n > 0,结果将是列表尾部的第(n-1)项。

然后你可以将它几乎直接翻译成F#:

let rec nth n list =
   let first::tail = list
   if n = 0 then first  // when n=0, the result is the first item
   else nth (n-1) tail  // for other n's, the result is (n-1)-th item of the tail

// Usage:
nth 5 [1;2;3;4;5;6;7]   // = 6

请注意,此函数不完整:当给出一个空列表时,它不知道该怎么做(编译器将能够发现它并发出警告)并且不处理n < 0的情况(这个编译器不会发现)。我将解决这些问题作为读者的练习。

答案 1 :(得分:0)

此类功能已存在,List.nth已弃用,但您可以使用List.item

List.item 5 [1;2;3;4;5;6]
//val it : int = 6

快捷方式是xs.[5],假设xs是一个列表。

您应该阅读docs on list。另一方面,您还应该阅读"The Tour of F#"