Haskell中的非穷举函数

Haskell中的非穷举函数,haskell,Haskell,我用Haskell编写了一个函数: recognize :: [GrammarRule] -> State -> [String] -> Bool recognize [] x [s] = False recognize gr x [s] = if elem True (map (\state -> elem state (takeSteps gr x [s]))(enders gr)) then True else False 这并非详尽无遗。识别功能有什么问题? 非

我用Haskell编写了一个函数:

recognize :: [GrammarRule] -> State -> [String] -> Bool
recognize [] x [s] = False
recognize gr x [s] = if elem True (map (\state -> elem state (takeSteps gr x [s]))(enders gr)) then True else False
这并非详尽无遗。识别功能有什么问题? 非常感谢

--the function takesteps is here: 
takeSteps :: [GrammarRule] -> State -> [String] -> [State]
takeSteps g s []     = [s]
takeSteps g s (w:ws) = concatMap (\nextState -> takeSteps g nextState ws) (successors g s w)

--the function enders is here:
enders :: [GrammarRule] -> [State]
enders [] = []
enders (r:rs) =
    let resultFromRest = enders rs in
    case r of
    End x -> x : resultFromRest
    Step x w' y -> resultFromRest

[s]
只匹配一个元素的列表,
s

如果要匹配任何列表,请使用简单标识符,
l
,例如:

recognize [] x [s] = False
recognize gr x l = if elem True (map (\state -> elem state (takeSteps gr x l))(enders gr)) then True else False
                                               -- note the usage of l here ^

避免
如果x为真,否则为假
,这是多余的。只需使用
x
。还可以使用
-Wall
打开警告,以便尽早捕获这些错误。