----------------------------------------------------------------------------- -- Copyright 2019, Advise-Me project team. This file is distributed under -- the terms of the Apache License 2.0. For more information, see the files -- "LICENSE.txt" and "NOTICE.txt", which are included in the distribution. ----------------------------------------------------------------------------- -- | -- Maintainer : bastiaan.heeren@ou.nl -- Stability : provisional -- Portability : portable (depends on ghc) -- ----------------------------------------------------------------------------- module Task.Pattern.Assess where import Data.Monoid import Domain.Math.Data.Relation import Recognize.Data.Approach import Bayes.Evidence import Recognize.Data.Attribute hiding (Other) import Recognize.Data.RuleId import Recognize.Data.Diagnosis as S import Recognize.Data.Step import Recognize.Expr.Symbols import Recognize.Model.Assess import Recognize.Model.Connectives import Recognize.Model.EvidenceBuilder import Task.Network.Pattern assess' :: Diagnosis -> Evidence assess' sd = stringNode (apprtostring appr) ans1Strat <> --check which approach has been used answerCorrect 16 attrs ans1 <> --check if the answer is indeed 16 generateEvidence buildStepsEvidence appr attrs where attrs = map (snd . getValue) $ steps sd appr = approach sd apprtostring Generalizing = Just "Algebraic" apprtostring Numerical = Just "Numeric1" apprtostring (Other "Numerical2") = Just "Numeric2" apprtostring _ = Nothing buildStepsEvidence :: Approach -> EvBuilder () buildStepsEvidence Generalizing = stepsAGBuilder buildStepsEvidence Numerical = stepsN1Builder buildStepsEvidence (Other "Numerical2") = stepsN2Builder buildStepsEvidence _ = return () stepsAGBuilder :: EvBuilder () stepsAGBuilder = do giveNodeAndCollect ans1Strat1Step2 $ withoutFailure (exists1 (Label "definition")) stepsAG1Builder >> stepsAG2Builder stepsAG1Builder :: EvBuilder () stepsAG1Builder = do giveNodeAndCollect ans1Strat1Step31 $ withoutFailure (exists1 (Label "equation")) giveNodeAndCollect ans1Strat1Step41 $ withoutFailure (exists1 (ARuleR Coverup_OneVar_Plus (wildcard .==. wildcard) (wildcard .==. wildcard))) giveNodeAndCollect ans1Strat1Step51 $ withoutFailure (exists1 (ARuleR Coverup_Times_Positive (wildcard .==. wildcard) (wildcard .==. wildcard))) giveNodeAndCollect ans1Strat1Step6 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16] stepsAG2Builder :: EvBuilder () stepsAG2Builder = do giveNodeAndCollect ans1Strat1Step32 $ withoutFailure (exists1 (Label "inequation")) giveNodeAndCollect ans1Strat1Step42 $ withoutFailure (exists1 (ARuleR Coverup_OneVar_Plus (wildcard .>. wildcard) (wildcard .>. wildcard))) giveNodeAndCollect ans1Strat1Step52 $ withoutFailure (exists1 (ARuleR Coverup_Times_Positive (wildcard .>. wildcard) (wildcard .>. wildcard))) giveNodeAndCollect ans1Strat1Step6 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16] stepsN1Builder :: EvBuilder () stepsN1Builder = do giveNodeAndCollectAllKnown ans1Strat2Step1 [exists1 (NExpr 7), exists1 (NExpr 10), exists1 (NExpr 13), exists1 (NExpr 16)] giveNodeAndCollect ans1Strat2Step2 $ exists1 (NExpr 52) ==> (failOnCommonMistake > success) giveNodeAndCollect ans1Strat2Step3 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16 ] stepsN2Builder :: EvBuilder () stepsN2Builder = do giveNodeAndCollect ans1Strat3Step2 $ withoutFailure (exists1 (Label "subtract")) giveNodeAndCollect ans1Strat3Step3 $ withoutFailure (exists1 (Label "divide")) giveNodeAndCollect ans1Strat3Step4 $ withoutFailure (exists1 (Label "increase")) giveNodeAndCollect ans1Strat3Step5 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16 ]