Posted to tcl by mjanssen at Sat Oct 31 00:10:12 GMT 2009view pretty

proc vector {vector {method {}} args} {
  if {$method eq {} } {
          return $vector
  }
  switch $method {
     inner {
         set res 0
         set other [lindex $args 0]
         foreach e1 $vector e2 [$other] {
            set res [expr {$res+$e1*$e2}]
         }
         return $res
     }
     @ {
        return [lindex $vector [lindex $args 0]]
     }
  }
}

set a {vector {1 2 3}}
set b {vector {1 2 3}}
puts [$a inner $b]