您可以使用mapM_
函数来申请print
列表中的每个元素。有 function tails
,返回参数的所有最终段(但是,它也返回空列表作为最后一个元素,因此,您可以将它与init
function 结合使用)。最后,您可以跳过第一个元素,如果您不想打印它,请使用函数tail
:
import Data.List
main :: IO ()
main = mapM_ print . init . tails $ tail [1, 8, 90, 100, 82]
印刷:
[8,90,100,82]
[90,100,82]
[100,82]
[82]
当然,可以使用单独的函数来解决您的问题。请注意,我添加了另外两个函数以使代码更具可读性和可重用性:
import Data.List
tailsExceptOriginalAndEmpty :: [a] -> [[a]]
tailsExceptOriginalAndEmpty = init . tails . tail
printListofLists :: (Show a) => [[a]] -> IO ()
printListofLists = mapM_ print
printTailsExceptOriginalAndEmpty :: (Show a) => [a] -> IO ()
printTailsExceptOriginalAndEmpty = printListofLists . tailsExceptOriginalAndEmpty
main :: IO ()
main = printTailsExceptOriginalAndEmpty [1, 8, 90, 100, 82]
另请注意,您应该处理输入列表为空的情况。在当前的实现中,它会引发错误。