Sum Inh 20
Center
imports
{
import System.Environment( getArgs )
import System.CPUTime
}
DATA Root
| Root tree: Tree
DATA Tree
| Node left: Tree right: Tree
| Leaf value: Int
ATTR Tree Root [ | | sval : Int ]
ATTR Tree [ ival1, ival2, ival3, ival4, ival5, ival6, ival7, ival8, ival9, ival10,
ival11, ival12, ival13, ival14, ival15, ival16, ival17, ival18,
ival19, ival20 : Int | | ]
SEM Root
| Root lhs.sval = @tree.sval
SEM Tree
| Leaf lhs.sval = @lhs.ival1 + @lhs.ival2 + @lhs.ival3 + @lhs.ival4 + @lhs.ival5 +
@lhs.ival6 + @lhs.ival7 + @lhs.ival8 + @lhs.ival9 + @lhs.ival10 +
@lhs.ival11 + @lhs.ival12 + @lhs.ival13 + @lhs.ival14 + @lhs.ival15 +
@lhs.ival16 + @lhs.ival17 + @lhs.ival18 + @lhs.ival19 + @lhs.ival20
| Node lhs.sval = @left.sval + @right.sval
SEM Root
| Root tree.ival1 = 1
| Root tree.ival2 = 0
| Root tree.ival3 = 0
| Root tree.ival4 = 0
| Root tree.ival5 = 0
| Root tree.ival6 = 0
| Root tree.ival7 = 0
| Root tree.ival8 = 0
| Root tree.ival9 = 0
| Root tree.ival10 = 0
| Root tree.ival11 = 0
| Root tree.ival12 = 0
| Root tree.ival13 = 0
| Root tree.ival14 = 0
| Root tree.ival15 = 0
| Root tree.ival16 = 0
| Root tree.ival17 = 0
| Root tree.ival18 = 0
| Root tree.ival19 = 0
| Root tree.ival20 = 0
{
genTree 0 = sem_Tree_Leaf $ 2
genTree n = sem_Tree_Node (genTree $ n-1) (genTree $ n-1)
main = do
(cant:_) <- getArgs
let p = cpuTimePrecision
t1 <- getCPUTime
print $ (sem_Root_Root (genTree (read cant)))
t2 <- getCPUTime
print $ (t2 - t1) `div` p
}