Haskell中的非穷举函数
我用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 这并非详尽无遗。识别功能有什么问题? 非
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
打开警告,以便尽早捕获这些错误。