F# 定义第n个函数,该函数将以整数、n和列表作为参数。应返回列表的第n个元素(从0索引)

F# 定义第n个函数,该函数将以整数、n和列表作为参数。应返回列表的第n个元素(从0索引),f#,F#,这很容易,但我在新的F#中,仍然在学习用F定义函数# 我试图定义第n个函数,它将接受一个整数n和一个列表作为参数。应返回列表的第n个元素(从0索引)。你知道我该怎么做吗?提前谢谢 例如:nth(3[1,2,3,4,6])应返回4这样的函数已经存在,List.nth已折旧,但您可以使用List.item: List.item 5 [1;2;3;4;5;6] //val it : int = 6 一个快捷方式是xs.[5],假设xs是一个列表 你可能应该读一下这本书。另一个想法是,你也应该阅读。因

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

我试图定义第n个函数,它将接受一个整数n和一个列表作为参数。应返回列表的第n个元素(从0索引)。你知道我该怎么做吗?提前谢谢


例如:
nth(3[1,2,3,4,6])
应返回
4
这样的函数已经存在,List.nth已折旧,但您可以使用
List.item

List.item 5 [1;2;3;4;5;6]
//val it : int = 6
一个快捷方式是
xs.[5]
,假设xs是一个列表


你可能应该读一下这本书。另一个想法是,你也应该阅读。

因为你在评论中解释过,你只是想理解它,而不是使用内置函数,下面是我的答案

首先,你要用严格的方式表达你的问题。如果你愿意的话,就说数学吧。我会这样做:当
n=0
时,结果是列表的第一项,对于任何
n>0
,结果将是列表尾部的第(n-1)项

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


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

你坚持哪一部分?让rec getn n list=匹配列表与|[x]->x | |->n(list.tail list)可能是我完全错了;我还在学习,你能不能至少用另一种语言显示一些代码或伪代码,并提供所需的输出。这就是我所想的:输入:1->10->30->14,索引=2输出:30索引2处的节点是30,算法也可以是:初始化计数=0 2。循环浏览链接列表a。如果count等于传递的索引,则返回当前节点b。增量计数c。将当前值更改为指向下一个当前值;但我试图不使用任何内置函数,这是我的主要挣扎。我想把第n个元素作为输入,还有列表。@Medha这很好。但在这种情况下,您可能应该在原始帖子中明确表示,您希望编写自己的递归
列表而且,最好是通过更新编辑您自己的问题,而不是在评论中添加零碎的内容。您还可以检查要列出的源。项?谢谢。很抱歉,我的问题不够清楚。我打算编辑它,但找不到选项。我是新来的谢谢你的帮助。我想我已经知道怎么做了。
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