ideas-math-1.1: src/Domain/Math/Numeric/Exercises.hs
-----------------------------------------------------------------------------
-- Copyright 2014, Open Universiteit Nederland. This file is distributed
-- under the terms of the GNU General Public License. For more information,
-- see the file "LICENSE.txt", which is included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer : bastiaan.heeren@ou.nl
-- Stability : provisional
-- Portability : portable (depends on ghc)
--
-----------------------------------------------------------------------------
-- $Id: Exercises.hs 6548 2014-05-16 10:34:18Z bastiaan $
module Domain.Math.Numeric.Exercises
( naturalExercise, integerExercise
, rationalExercise, fractionExercise
, fractionLiberalExercise
) where
import Domain.Math.Expr
import Domain.Math.Numeric.Examples
import Domain.Math.Numeric.Generators
import Domain.Math.Numeric.Strategies
import Domain.Math.Numeric.Views
import Ideas.Common.Library
------------------------------------------------------------
-- Exercises
numericExercise :: LabeledStrategy (Context Expr) -> Exercise Expr
numericExercise s = makeExercise
{ status = Alpha
, parser = parseExpr
, equivalence = withoutContext (viewEquivalent rationalView)
, strategy = s
, navigation = termNavigator
}
naturalExercise :: Exercise Expr
naturalExercise = (numericExercise naturalStrategy)
{ exerciseId = describe "simplify expression (natural numbers)" $
newId "numbers.natural"
, ready = predicateView integerNF
, examples = level Medium $ concat calculateResults
}
integerExercise :: Exercise Expr
integerExercise = (numericExercise integerStrategy)
{ exerciseId = describe "simplify expression (integers)" $
newId "numbers.integers"
, ready = predicateView integerNF
, examples = level Medium $ concat calculateResults
}
rationalExercise :: Exercise Expr
rationalExercise = (numericExercise rationalStrategy)
{ exerciseId = describe "simplify expression (rational numbers)" $
newId "numbers.rational"
, ready = predicateView rationalNF
, randomExercise = simpleGenerator (rationalGenerator 5)
}
fractionExercise :: Exercise Expr
fractionExercise = (numericExercise fractionStrategy)
{ exerciseId = describe "simplify fractions" $
newId "arithmetic.fractions"
, status = Provisional
, ready = predicateView rationalNF
, examples = fractionExamples
, strategy = fractionStrategy
-- , randomExercise = simpleGenerator (rationalGenerator 5) -- JJ: This is not a very good random generator for fraction exercises.
}
fractionLiberalExercise :: Exercise Expr
fractionLiberalExercise = (numericExercise fractionLiberalStrategy)
{ exerciseId = describe "simplify fractions liberally" $
newId "arithmetic.fractions.liberal"
, status = Provisional
, ready = predicateView rationalNF
, examples = fractionLiberalExamples
, strategy = fractionLiberalStrategy
-- , randomExercise = simpleGenerator (rationalGenerator 5) -- JJ: This is not a very good random generator for fraction exercises.
}
calculateResults :: [[Expr]]
calculateResults = [level1, level2, level3]
where
level1 =
[ -8*(-3), -3-9, 55/(-5), -6*9, -11- (-3), 6-(-9), -10+3, 6+(-5) ]
level2 =
[ -3-(6*(-3)), -12/3 - 3, -4*(2+3), 2-6*6
, -27/(4-(-5)), (-24/(-6)) - 3, 8-(-77/(-11)), 4/(-4+5)
]
level3 =
[ 4*(3-(6-2)), (-16-9)/5 - 3, 4- (4-13)/(-3), (3*(-3))-5-4
, -55/(3*(-5)+4), -4*(-2+ (-4)+7), -8 - (140/4*5), (13-(2-1)) / 3
]