Version 1 of binary-trees benchmark

Updated 2008-06-04 14:26:18 by SL

Discipline of Computer Language Benchmarks Game.


 #!/usr/bin/tclsh
 ##
 ## The Computer Lannguage Shootout
 ## http://shootout.alioth.debian.org/ 
 ## Contributed by Heiner Marxen
 ##
 ## "binary-trees"	for Tcl
 ## Call:	tclsh binarytrees.tcl 16
 ##
 ## $Id: binarytrees-tcl.code,v 1.21 2007-11-17 01:27:15 igouy-guest Exp $
 
 ## A tree node is implemented as a list with 3 elements:
 ##	0 left  subtree
 ##	1 right subtree
 ##	2 item
 ## An empty tree is an empty list {}, an thus has llength 0.
 
 proc ItemCheck {tree} {
     if {![llength [lindex $tree 0]} {
         return lindex $tree 2
     } else {
         return expr {             [lindex $tree 2
             + [ItemCheck [lindex $tree 0]
             - ItemCheck [lindex $tree 1]}
     }
 }
 
 proc BottomUpTree {item depth} {
     if {$depth > 0} {
         set ndepth expr {$depth - 1}
         return list [BottomUpTree [expr {2 * $item - 1} $ndepth] \
                 BottomUpTree [expr {2 * $item    } $ndepth] \
                 $item
         ]
     } else {
         return list {} {} $item
     }
 }
 
 proc tellTree {typ depth check} {
     puts "$typ tree of depth $depth\t check: $check"
 }
 
 proc main {argv} {
     set N lindex $argv 0
     
     set minDepth 4
     
     if {($minDepth + 2) > $N} {
         set maxDepth expr {$minDepth + 2}
     } else {
         set maxDepth $N
     }
     
     set stretchDepth expr {$maxDepth + 1}
     
     set stretchTree BottomUpTree 0 $stretchDepth
     tellTree "stretch" $stretchDepth ItemCheck $stretchTree
     set stretchTree {}
     
     set longLivedTree BottomUpTree 0 $maxDepth
     
     for {set dep $minDepth} {$dep <= $maxDepth} {incr dep 2} {
         set iterations expr {1 << ($maxDepth - $dep + $minDepth)}
         set check 0
         for {set i 1} {$i <= $iterations} {incr i} {
             set tempTree BottomUpTree $i $dep
             set check expr {$check + [ItemCheck $tempTree}]
             set tempTree {}
             
             set tempTree BottomUpTree [expr {-$i} $dep]
             set check expr {$check + [ItemCheck $tempTree}]
             set tempTree {}
         }
         
         puts "expr {$iterations * 2}\t trees of depth $dep\t check: $check"
     }
     
     tellTree "long lived" $maxDepth ItemCheck $longLivedTree
     
     return 0
 }
 
 main $argv
 

Category Performance