List Haskell反转尾部但离开第一个元素

List Haskell反转尾部但离开第一个元素,list,haskell,reverse,List,Haskell,Reverse,我在以下练习中遇到问题: 我应该反转列表中的所有元素,除了第一个,列表中的第一个元素必须保持其原始位置 正确的例子: 到目前为止我所做的: rvrsTail :: [x] -> [x] rvrsTail xs = reverse ( tail xs) 这确实颠倒了列表的尾部,但删除了第一个元素,因为我不能将第一个元素存储在变量中,所以我似乎不知道如何解决这个问题 错误输出: 因为这应该是初学者的练习,所以解决方法应该很简单。您就快到了。为了确保列表的第一个元素保持原样,只需使用模式匹配并

我在以下练习中遇到问题:

我应该反转列表中的所有元素,除了第一个,列表中的第一个元素必须保持其原始位置

正确的例子:

到目前为止我所做的:

rvrsTail :: [x] -> [x]
rvrsTail xs = reverse ( tail xs)
这确实颠倒了列表的尾部,但删除了第一个元素,因为我不能将第一个元素存储在变量中,所以我似乎不知道如何解决这个问题

错误输出:


因为这应该是初学者的练习,所以解决方法应该很简单。

您就快到了。为了确保列表的第一个元素保持原样,只需使用模式匹配并删除尾部调用:


现在,请注意,当使用空列表进行尝试时,上述函数将引发异常。你应该处理好那件事。

你就快到了。为了确保列表的第一个元素保持原样,只需使用模式匹配并删除尾部调用:


现在,请注意,当使用空列表进行尝试时,上述函数将引发异常。您应该处理这种情况。

当您收到一个非空列表时,您必须将头部保留在原处,并将尾部反向附加。换句话说,您可以将列表解构为头部和尾部,然后使用该头部和反向尾部重建列表:

rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail

当您收到一个非空列表时,必须将其头部保留在原来的位置,并反向附加尾部。换句话说,您可以将列表解构为头部和尾部,然后使用该头部和反向尾部重建列表:

rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail

所以我应该实现一些保护来处理异常,对吗?但是如果我这样做了,我如何指定返回可以是一个列表(如果它不是空的)或一个字符串(如果它是空的)来告诉字符串是空的?@nunotart只是想知道空列表输入需要什么输出?它不一定是字符串。所以我应该实现一些保护来处理异常,对吗?但是如果我这样做了,我如何指定返回可以是一个列表(如果它不是空的)或一个字符串(如果它是空的)来告诉字符串是空的?@nunotart只是想知道空列表输入需要什么输出?它不一定是字符串。
rvrsTail :: [x] -> [x]
rvrsTail (x:xs) = x:(reverse xs)
rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail