import PGF import Arithmetic main :: IO () main = do pgf <- readPGF "Arithmetic.pgf" interact (unlines . map (translate pgf transfer) . lines) translate :: PGF -> (Tree->Tree) -> String -> String translate pgf transfer s = case parseAllLang pgf (startCat pgf) s of (lang,tree:_):_ -> linearize pgf lang (transfer tree) _ -> "NO PARSE" transfer :: Tree -> Tree transfer = gf . answer . fg answer :: GQuestion -> GAnswer answer (GEven x) = test even x answer (GOdd x) = test odd x answer (GPrime x) = test prime x test :: (Int->Bool) -> GObject -> GAnswer test p (GNumber (GInt x)) = if p x then GYes else GNo prime n = and [n `mod` d /= 0 | d <-[2..n-1]] -- could be more efficient...