Haskell扭转尾巴但留下第一个元素

eXi*_*nCe 1 reverse haskell list

我在进行以下练习时遇到问题:

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

正确的例子:

input: rvrsTail [1,2,3,4,5]
output [1,5,4,3,2]
Run Code Online (Sandbox Code Playgroud)

到目前为止我做了什么:

rvrsTail :: [x] -> [x]
rvrsTail xs = reverse ( tail xs)
Run Code Online (Sandbox Code Playgroud)

这确实反转了列表的尾部,但删除了第一个元素,因为我无法将第一个元素存储在变量中,所以我似乎无法理解如何解决这个问题.

错误输出:

input: rvrsTail [1,2,3,4,5]
output [5,4,3,2]
Run Code Online (Sandbox Code Playgroud)

由于这应该是初学者的练习,解决方案应该很简单.

mar*_*iop 5

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

rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail
Run Code Online (Sandbox Code Playgroud)