所以我想检查列表是否属于[1..6]的排列。我的想法是:
>import Data.List
>perm = permutations [1..6]
>funk3 :: [Int] -> Bool
>funk3 [] = False
>funk3 (x:xs) = if (x:xs) == perm
> then True
> else False
我知道下面的代码不正确,因为我无法将列表与列表进行比较,其中包含更多列表。但我真的不知道如何告诉Haskell我的列表只是一个部分数量。请帮助我!
答案 0 :(得分:3)
您可以使用elem
来检查会员资格。
funk3 :: [Int] -> Bool
funk3 xs = elem xs perm
但是,这是相当低效的,因为不需要生成所有720个排列。我们可以对输入列表进行排序,并将其与[1..6]进行比较。
funk3 :: [Int] -> Bool
funk3 xs = sort xs == [1..6]
或者,如果我们想避免排序可能很大的列表,
funk3 :: [Int] -> Bool
funk3 xs@[_,_,_,_,_,_] = sort xs == [1..6]
funk3 _ = False