List 如何返回Haskell中长度为n的列表的前n-1个元素?

List 如何返回Haskell中长度为n的列表的前n-1个元素?,list,haskell,tail,List,Haskell,Tail,我知道tail函数返回列表的最后n-1个元素(其中n是列表的长度),因此我定义了自己的“cotail”函数来返回前n-1个元素: cotail = (reverse . tail . reverse) 这是最好的方法,还是有内置函数或更聪明的方法来实现这一点?我相信您正在寻找。init函数正是您所需要的。正如其他人所说,init就是您所寻找的。但这里是如何回答“是否有一个Haskell函数来做X?”这样的问题的: 找出您想要的函数的类型签名是什么。在这种情况下,我们希望类型签名是[a]->[a

我知道tail函数返回列表的最后n-1个元素(其中n是列表的长度),因此我定义了自己的“cotail”函数来返回前n-1个元素:

cotail = (reverse . tail . reverse)

这是最好的方法,还是有内置函数或更聪明的方法来实现这一点?

我相信您正在寻找。

init函数正是您所需要的。

正如其他人所说,
init
就是您所寻找的。但这里是如何回答“是否有一个Haskell函数来做X?”这样的问题的:

  • 找出您想要的函数的类型签名是什么。在这种情况下,我们希望类型签名是
    [a]->[a]

  • 搜索或搜索。如果你在其中一个中找不到,试试另一个。通常,输入参数的顺序是否正确并不重要,但可能需要进行实验


  • 刚才在Hayoo上执行此搜索时,
    init
    显示为我的第三个结果。

    使用
    init
    ,正如建议的那样。但您需要确定如何处理空列表

    cotail xs = [x | x:_:_ <- tails xs]
    

    cotail xs=[x | x:uu:uuw,“返回最后的n-1个元素”并不是一个很好的描述。通常,长度对于列表来说不是一个好的属性,因为它们可能是无限的(即使不是无限的,
    length
    也不必要地昂贵,因为它需要遍历整个列表)“
    tail
    返回除
    head
    之外的所有元素。同样地,
    init
    返回除
    最后一个
    元素之外的所有元素。没错,但它起到了作用,即每个人都理解我的问题。太好了!我不知道这些搜索引擎,太棒了!