[Haskell-beginners] University project - weird problem

Daniel Fischer daniel.is.fischer at web.de
Wed Apr 21 21:11:34 EDT 2010


Am Donnerstag 22 April 2010 02:30:06 schrieb Renato dos Santos Leal:
>
> But there is still one problem that I haven't corrected:
> printing the tag when there is only one keyword or identifier in the
> line the case of beign the last one of the line is corrected but this
> one I don't know how to do


> pchave :: String -> String -> IO ()
> pchave (x:xs) ys
>    | x `notElem` listA = pchave xs (ys++[x])
>    | otherwise = pPCouI (x:xs) ys

When you're collecting an identifier or keyword, stop when you encounter a 
newline.

>
> pPCouI :: String -> String -> IO ()
> pPCouI (x:xs) z
>    | membroPC z = do{ putStr (z ++ " <palavra chave>\n") ; le_bloco
> (x:xs)} | otherwise = do{putStr z ; putStr " <identificador>\n" ;
> le_bloco (x:xs)}
>

By the way,

function :: a -> Bool
function x
    | condition = True
    | otherwise = False

is rather clumsy,

function = condition

is better.

> membroPC :: String -> Bool
> membroPC x
>    | x `elem` listPC = True
>    | otherwise = False
>

membroPC = (`elem` listPC)


More information about the Beginners mailing list