OCaml —返回包含该列表尾部的列表
|
对于
[1;2;3;4;5]
,我想返回[[1;2;3;4;5];[2;3;4;5];[3;4;5;];[4;5];[5];[]]
我正在尝试使用列表库,但不确定如何使用。到目前为止,我知道我必须使用List.tl来获取没有第一个元素的列表
let rec tailsoflist (l : \'a list) : \'a list list =
match l with
[] -> [[]]
| x::xs -> l::(tails xs)
我以递归方式执行此操作,但现在我只想使用列表库而不使用递归。
let tails (l : \'a list) : \'a list list
编辑:对不起,我为函数返回指定的内容不正确。只是使用正确的输出进行了更新。
没有找到相关结果
已邀请:
4 个回复
薄扩络拜
的尾巴,而是
的尾巴的副本:
才脊烽馈低
会更惯用:
其他语言(例如F#)提供
函数,可以用
编写。
草票
它产生您所期望的尾巴:
尾部是输入列表的实际结构尾部,因此ѭ15。
贡炮逗握惫
库之外。
您的函数(由于使用
而不是
而不会编译)将返回列表的后缀列表。由于列表结构的原因,它比前缀更容易计算。 您可以从后缀表示前缀:
您可以使用累加器进行直接版本化:
如果要避免递归,请使用
表示,但这很麻烦,因此我认为应该使用直接版本:
最后,可以使用延续版本破坏您的大脑,但是我不记得确切的代码。大致上,延续等效于直接版本的“累加器”。