(初学者peroblem)检查一个列表是否属于列表中的列表

时间:2017-11-12 22:56:35

标签: haskell

所以我想检查列表是否属于[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我的列表只是一个部分数量。请帮助我!

1 个答案:

答案 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