[Haskell-cafe] Pattern match failure
Luke Palmer
lrpalmer at gmail.com
Wed Apr 9 22:19:08 EDT 2008
On Thu, Apr 10, 2008 at 2:05 AM, Jackm139 <jackmarathon at gmail.com> wrote:
> I'm trying to write a function to recognize a context free grammar, but I
> keep getting pattern match failure errors. This is what I have:
>
> data Grammar c = Brule c c c | Rule c c
>
> gez = [(Brule 'S' 'p' 'D'),(Brule 'D' 't' 'E'),(Rule 'E' 'j')]
>
> recog :: String -> String -> [Grammar Char] -> Bool
> recog a b list = case list of
> [Brule x y z] -> if a == [x] then recog [z] b list else recog a b list
> [Rule x y] -> True
I am stumped as to what this function is trying to do. But your
pattern matches are not total; in particular you only handle lists of
a single element. I suggest either:
recog a b list = case list of
(Brule x y z : rules) -> ... (involving 'rules')
(Rule x y : rules) -> ... (involving 'rules')
[] -> ... (case for the empty list)
Or:
recog a b (rule:rules) =
case rule of
Brule x y z -> ...
Rule x y -> ...
recog a b [] = ...
But the point is that you have to say how to handle lists of more thn
one element.
Luke
More information about the Haskell-Cafe
mailing list