packages feed

L-seed-0.2: src/fastScorer.hs

import Lseed.Data
import Lseed.Data.Functions
import Lseed.Grammar.Parse
import Lseed.Constants
import Lseed.Mainloop
import qualified Data.Map as M
import Control.Monad
import Debug.Trace
import System.Environment
import System.Time
import System.Random
import Text.Printf

parseFile filename = do
	content <- readFile filename
	let result = parseGrammar filename content
	return $ either (error.show) id result

readArgs doit = do
	args <- getArgs
	if null args
	  then	do
		putStrLn "L-Seed Demo application."
		putStrLn "Please pass L-Seed files on the command line."
	  else	do
		genomes <- mapM parseFile args
		doit (spread genomes)
  where	spread gs = zipWith (\g p ->
  		Planted ((fromIntegral p + 0.5) / l)
		        p
			(show p)
			g
			inititalPlant
		) gs [0..]
	  where l = fromIntegral (length gs)
	      

scoringObs = nullObserver {
	obFinished = \garden -> do
		forM_ garden $ \planted -> do
			printf "Plant from %s (%d) at %.4f: Total size %.4f\n"
				(plantOwnerName planted)
				(plantOwner planted)
				(plantPosition planted)
				(plantLength (phenotype planted))
		let owernerscore = foldr (\p -> M.insertWith (+) (plantOwner p, plantOwnerName p)(plantLength (phenotype p))) M.empty garden
		forM_ (M.toList owernerscore) $ \((o,n),s) -> 
			printf "Sum for %s (%d): %.4f\n" n o s
	}

main = readArgs $ \garden -> do
	lseedMainLoop False scoringObs (constGardenSource garden) 30