diff --git a/src-3.0/GF/Command/Commands.hs b/src-3.0/GF/Command/Commands.hs index b68ad7470..f586125b2 100644 --- a/src-3.0/GF/Command/Commands.hs +++ b/src-3.0/GF/Command/Commands.hs @@ -454,3 +454,18 @@ allCommands pgf = Map.fromList [ -- ps -f -g s returns g (f s) stringOps opts s = foldr app s (reverse (map prOpt opts)) where app f = maybe id id (stringOp f) + +translationQuiz :: PGF -> Language -> Language -> Category -> IO () +translationQuiz pgf ig og cat = do + tts <- translationList pgf ig og cat infinity + mkQuiz "Welcome to GF Translation Quiz." tts + +morphologyQuiz :: PGF -> Language -> Category -> IO () +morphologyQuiz pgf ig cat = do + tts <- morphologyList pgf ig cat infinity + mkQuiz "Welcome to GF Morphology Quiz." tts + +-- | the maximal number of precompiled quiz problems +infinity :: Int +infinity = 256 + diff --git a/src-3.0/PGF/Quiz.hs b/src-3.0/PGF/Quiz.hs index a9aba51cf..7f5bae201 100644 --- a/src-3.0/PGF/Quiz.hs +++ b/src-3.0/PGF/Quiz.hs @@ -13,9 +13,8 @@ -------------------------------------------------------------------------------- module PGF.Quiz ( - translationQuiz, + mkQuiz, translationList, - morphologyQuiz, morphologyList ) where @@ -31,13 +30,15 @@ import Data.List (nub) -- translation and morphology quiz. AR 10/5/2000 -- 12/4/2002 -translationQuiz :: PGF -> Language -> Language -> Category -> IO () -translationQuiz pgf ig og cat = do - tts <- translationList pgf ig og cat infinity - let qas = [ (q, mkAnswer as) | (q,as) <- tts] - teachDialogue qas "Welcome to GF Translation Quiz." +-- generic quiz function -translationList :: PGF -> Language -> Language -> Category -> Int -> IO [(String,[String])] +mkQuiz :: String -> [(String,[String])] -> IO () +mkQuiz msg tts = do + let qas = [ (q, mkAnswer as) | (q,as) <- tts] + teachDialogue qas msg + +translationList :: + PGF -> Language -> Language -> Category -> Int -> IO [(String,[String])] translationList pgf ig og cat number = do ts <- generateRandom pgf cat >>= return . take number return $ map mkOne $ ts @@ -45,12 +46,6 @@ translationList pgf ig og cat number = do mkOne t = (norml (linearize pgf ig t), map (norml . linearize pgf og) (homonyms t)) homonyms = nub . parse pgf ig cat . linearize pgf ig -morphologyQuiz :: PGF -> Language -> Category -> IO () -morphologyQuiz pgf ig cat = do - tts <- morphologyList pgf ig cat infinity - let qas = [ (q, mkAnswer as) | (q,as) <- tts] - teachDialogue qas "Welcome to GF Morphology Quiz." - morphologyList :: PGF -> Language -> Category -> Int -> IO [(String,[String])] morphologyList pgf ig cat number = do ts <- generateRandom pgf cat >>= return . take (max 1 number) @@ -70,7 +65,3 @@ mkAnswer as s = if (elem (norml s) as) norml :: String -> String norml = unwords . words --- | the maximal number of precompiled quiz problems -infinity :: Int -infinity = 256 -