私は、任意のリストを取り、そのリストを比較して、一方が他方のサブリストであるかどうかを調べる関数を書いています。 stdinについては、ユーザーに2つのリストを尋ねたいと思っていましたが、任意のタイプを受け入れる方法を見つけることはできません。ここに私のコードは、これまでです: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
私の主な問題は、私はread
のためのタイプを選択する必要がライン5
です。
私は現在、一度に一つをサポートすることができますが、私が持っているしたい入力と出力のいくつかの例:
>>> [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
任意の助けをいただければ幸いです!
ユーザが入力として入力できるものとその入力を解釈するタイプの2つの例を挙げてください。 – ErikR
良いアイデア、私はそれらを追加しました –
ユーザーは次のように入力できます: '[1、2、" cat "]'? – ErikR