forked from GitHub/gf-core
move PGF.Quiz to GF.Quiz. It is not part of the PGF API
This commit is contained in:
1
GF.cabal
1
GF.cabal
@@ -676,6 +676,7 @@ executable gf
|
|||||||
GF.Compile.GetGrammar
|
GF.Compile.GetGrammar
|
||||||
GF.Compile
|
GF.Compile
|
||||||
GF.System.Readline
|
GF.System.Readline
|
||||||
|
GF.Quiz
|
||||||
PGF
|
PGF
|
||||||
PGF.CId
|
PGF.CId
|
||||||
PGF.Data
|
PGF.Data
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import PGF.ShowLinearize
|
|||||||
import PGF.Macros
|
import PGF.Macros
|
||||||
import PGF.Data ----
|
import PGF.Data ----
|
||||||
import PGF.Morphology
|
import PGF.Morphology
|
||||||
import PGF.Quiz
|
|
||||||
import PGF.VisualizeTree
|
import PGF.VisualizeTree
|
||||||
import GF.Compile.Export
|
import GF.Compile.Export
|
||||||
import GF.Infra.Option (noOptions)
|
import GF.Infra.Option (noOptions)
|
||||||
@@ -26,6 +25,7 @@ import GF.Command.Abstract
|
|||||||
import GF.Command.Messages
|
import GF.Command.Messages
|
||||||
import GF.Text.Lexing
|
import GF.Text.Lexing
|
||||||
import GF.Text.Transliterations
|
import GF.Text.Transliterations
|
||||||
|
import GF.Quiz
|
||||||
|
|
||||||
import GF.Command.TreeOperations ---- temporary place for typecheck and compute
|
import GF.Command.TreeOperations ---- temporary place for typecheck and compute
|
||||||
|
|
||||||
|
|||||||
@@ -153,34 +153,6 @@ putStrFlush s = putStr s >> hFlush stdout
|
|||||||
putStrLnFlush :: String -> IO ()
|
putStrLnFlush :: String -> IO ()
|
||||||
putStrLnFlush s = putStrLn s >> hFlush stdout
|
putStrLnFlush s = putStrLn s >> hFlush stdout
|
||||||
|
|
||||||
-- * a generic quiz session
|
|
||||||
|
|
||||||
type QuestionsAndAnswers = [(String, String -> (Integer,String))]
|
|
||||||
|
|
||||||
teachDialogue :: QuestionsAndAnswers -> String -> IO ()
|
|
||||||
teachDialogue qas welc = do
|
|
||||||
putStrLn $ welc ++++ genericTeachWelcome
|
|
||||||
teach (0,0) qas
|
|
||||||
where
|
|
||||||
teach _ [] = do putStrLn "Sorry, ran out of problems"
|
|
||||||
teach (score,total) ((question,grade):quas) = do
|
|
||||||
putStr ("\n" ++ question ++ "\n> ")
|
|
||||||
answer <- getLine
|
|
||||||
if (answer == ".") then return () else do
|
|
||||||
let (result, feedback) = grade answer
|
|
||||||
score' = score + result
|
|
||||||
total' = total + 1
|
|
||||||
putStr (feedback ++++ "Score" +++ show score' ++ "/" ++ show total')
|
|
||||||
if (total' > 9 && fromInteger score' / fromInteger total' >= 0.75)
|
|
||||||
then do putStrLn "\nCongratulations - you passed!"
|
|
||||||
else teach (score',total') quas
|
|
||||||
|
|
||||||
genericTeachWelcome =
|
|
||||||
"The quiz is over when you have done at least 10 examples" ++++
|
|
||||||
"with at least 75 % success." +++++
|
|
||||||
"You can interrupt the quiz by entering a line consisting of a dot ('.').\n"
|
|
||||||
|
|
||||||
|
|
||||||
-- * IO monad with error; adapted from state monad
|
-- * IO monad with error; adapted from state monad
|
||||||
|
|
||||||
newtype IOE a = IOE (IO (Err a))
|
newtype IOE a = IOE (IO (Err a))
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
-- translation and morphology quiz. AR 10\/5\/2000 -- 12\/4\/2002 -- 14\/6\/2008
|
-- translation and morphology quiz. AR 10\/5\/2000 -- 12\/4\/2002 -- 14\/6\/2008
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
module PGF.Quiz (
|
module GF.Quiz (
|
||||||
mkQuiz,
|
mkQuiz,
|
||||||
translationList,
|
translationList,
|
||||||
morphologyList
|
morphologyList
|
||||||
@@ -69,3 +69,30 @@ mkAnswer cod as s =
|
|||||||
|
|
||||||
norml = unwords . words
|
norml = unwords . words
|
||||||
|
|
||||||
|
|
||||||
|
-- * a generic quiz session
|
||||||
|
|
||||||
|
type QuestionsAndAnswers = [(String, String -> (Integer,String))]
|
||||||
|
|
||||||
|
teachDialogue :: QuestionsAndAnswers -> String -> IO ()
|
||||||
|
teachDialogue qas welc = do
|
||||||
|
putStrLn $ welc ++++ genericTeachWelcome
|
||||||
|
teach (0,0) qas
|
||||||
|
where
|
||||||
|
teach _ [] = do putStrLn "Sorry, ran out of problems"
|
||||||
|
teach (score,total) ((question,grade):quas) = do
|
||||||
|
putStr ("\n" ++ question ++ "\n> ")
|
||||||
|
answer <- getLine
|
||||||
|
if (answer == ".") then return () else do
|
||||||
|
let (result, feedback) = grade answer
|
||||||
|
score' = score + result
|
||||||
|
total' = total + 1
|
||||||
|
putStr (feedback ++++ "Score" +++ show score' ++ "/" ++ show total')
|
||||||
|
if (total' > 9 && fromInteger score' / fromInteger total' >= 0.75)
|
||||||
|
then do putStrLn "\nCongratulations - you passed!"
|
||||||
|
else teach (score',total') quas
|
||||||
|
|
||||||
|
genericTeachWelcome =
|
||||||
|
"The quiz is over when you have done at least 10 examples" ++++
|
||||||
|
"with at least 75 % success." +++++
|
||||||
|
"You can interrupt the quiz by entering a line consisting of a dot ('.').\n"
|
||||||
Reference in New Issue
Block a user