d8666fa04dee85ac60476bb007e376c3ef781961
[L-seed.git] / src / dbscorer.hs
1 import Lseed.Data
2 import Lseed.Data.Functions
3 import Lseed.DB
4 import Lseed.Grammar.Compile
5 import Lseed.Grammar.Parse
6 import Lseed.Mainloop
7 import Control.Applicative
8 import Control.Monad
9 import Text.Printf
10
11 getGarden = spread <$> map compileDBCode
12                    <$> getCodeToRun
13   where spread gs = zipWith (\(u,g) p -> Planted ((fromIntegral p + 0.5) / l) u g inititalPlant) gs [0..]
14           where l = fromIntegral (length gs)
15
16 compileDBCode dbc =
17         case  parseGrammar "" (dbcCode dbc) of
18                 Left err          -> error (show err)
19                 Right grammarFile -> (dbcUserID dbc, compileGrammarFile grammarFile)
20
21 scoringObs = nullObserver {
22         obFinished = \garden -> do
23                 forM_ garden $ \planted -> do
24                         printf "Plant from %d at %.4f: Total size %.4f\n"
25                                 (plantOwner planted)
26                                 (plantPosition planted)
27                                 (plantLength (phenotype planted))
28                 addFinishedSeasonResults garden
29         }
30
31 main = do
32         garden <- getGarden
33         lseedMainLoop False scoringObs 10 garden