我正在尝试在Haskell中实现以下功能,它是一个递归遍历,它接收一个Int和一个列表列表[[Int]]并将内部列表的元素向右移动而不改变列表的大小。我可以按正确的顺序获得带有数字的列表,但无法将它们重新插入到正确的子列表中。
shift_right::Int->[[Int]]->[[Int]]
示例1:
shift_right 1 [[1,2,3],[4,5,6]] => [[6,1,2],[3,4,5]]
示例2:
shift_right 3 [[],[1],[2,3],[4,5,6]] => [[],[4],[5,6],[1,2,3]]
假设空列表仅出现在开头,而从不出现在中间,那么一种方法可能是,首先找到一种方法来进行单次旋转,然后对n
个旋转重复相同的操作n
次。我认为我们可以为此目的使用mapAccumL
。