我正在寫一個函數,它會接受任意列表,並將它們進行比較以查看其中是否是另一個列表的子列表。對於stdin,我想要求用戶提供兩個列表,但我無法弄清楚接受任意類型的方法。這是我到目前爲止的代碼:如何從Haskell中的任意類型[a]的stdin讀取列表?
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
任何幫助,將不勝感激:
我想有而我只能目前支持一次一個部分的輸入和輸出的例子!
舉幾個例子,說明用戶可能輸入什麼樣的輸入以及您想要將輸入解釋爲什麼類型。 – ErikR
好主意,我在 –
中加入了它們:用戶可以輸入:[[1,2,'cat']'? – ErikR