这很容易,但我在新的F#中,仍然学习在F#中定义函数
我正在尝试定义第n个函数,它将采用整数n和列表作为参数。应该返回从0开始索引的列表的第n个元素。知道我该怎么办?提前致谢
例如:nth(3, [1,2,3,4,6])
应该返回4
答案 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#"。