Haskell 反转尾部但留下第一个元素
Haskell reversing tail but leaving first element
我在进行以下练习时遇到了问题:
我应该反转列表中除第一个元素之外的所有元素,列表的第一个元素必须保留在其原始位置。
正确示例:
input: rvrsTail [1,2,3,4,5]
output [1,5,4,3,2]
到目前为止我做了什么:
rvrsTail :: [x] -> [x]
rvrsTail xs = reverse ( tail xs)
这确实颠倒了列表的尾部,但删除了第一个元素,并且由于我无法将第一个元素存储在变量中,所以我似乎无法理解如何解决这个问题。
错误输出:
input: rvrsTail [1,2,3,4,5]
output [5,4,3,2]
由于这应该是初学者的练习,因此解决方案应该很简单。
你快到了。为了确保列表的第一个元素保持原样,只需使用模式匹配并删除 tail
调用:
rvrsTail :: [x] -> [x]
rvrsTail (x:xs) = x:(reverse xs)
现在,请注意上面的函数在尝试使用空列表时会抛出异常。你应该处理那个案子。
当您收到一个非空列表时,您必须将头部保留在原处并将尾部反向附加。换句话说,你可以将列表解构为头部和尾部,然后用头部和反转的尾部重建列表:
rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail
我在进行以下练习时遇到了问题:
我应该反转列表中除第一个元素之外的所有元素,列表的第一个元素必须保留在其原始位置。
正确示例:
input: rvrsTail [1,2,3,4,5]
output [1,5,4,3,2]
到目前为止我做了什么:
rvrsTail :: [x] -> [x]
rvrsTail xs = reverse ( tail xs)
这确实颠倒了列表的尾部,但删除了第一个元素,并且由于我无法将第一个元素存储在变量中,所以我似乎无法理解如何解决这个问题。
错误输出:
input: rvrsTail [1,2,3,4,5]
output [5,4,3,2]
由于这应该是初学者的练习,因此解决方案应该很简单。
你快到了。为了确保列表的第一个元素保持原样,只需使用模式匹配并删除 tail
调用:
rvrsTail :: [x] -> [x]
rvrsTail (x:xs) = x:(reverse xs)
现在,请注意上面的函数在尝试使用空列表时会抛出异常。你应该处理那个案子。
当您收到一个非空列表时,您必须将头部保留在原处并将尾部反向附加。换句话说,你可以将列表解构为头部和尾部,然后用头部和反转的尾部重建列表:
rvrsTail :: [x] -> [x]
rvrsTail [] = []
rvrsTail (listHead : listTail) = listHead : reverse listTail