我正在编写一个函数,它接受任意列表并比较它们以查看一个是否是另一个的子列表。对于标准输入,我想向用户询问两个列表,但我想不出一种接受任意类型的方法。到目前为止,这是我的代码:
1 main :: IO ()
2 main = do
3 l1 <- getLine
4 l2 <- getLine
5 print $ sublist (read l1 :: [Int]) (read l2:: [Int])
6
7 sublist :: Eq a => [a] -> [a] -> Bool
8 sublist b p = any ((b ==) . take len) . takeWhile ((len<=) . length) $ iterate tail p
9 where len = length b
我的主要问题是5
我必须为read
.
我希望有一些输入和输出示例,而我目前一次只能支持一个:
>>> [1,2,3]
[1,2,3,4,5]
True
>>> ["a", "bc"]
["xy", "b", "bc"]
False
>>> [True, False, True]
>>> [False, True, False, True]
True
-- And even nested types
>>> [[1], [2,3]]
[[2,4], [1], [2,3], [4]
True
任何帮助将不胜感激!