Posted to tcl by kbk at Tue Aug 21 01:47:14 GMT 2012view raw
- namespace path ::tcl::mathop
- interp recursionlimit {} 120000
- proc fib {n} {
- ::tcl::unsupported::assemble {
- load n ;# n
- dup ;# n n
- push 1 ;# n n 1
- gt ;# n n>1
- jumpFalse done ;# n
- push 1 ;# n 1
- sub ;# n-1
- push fib ;# n-1 fib
- dup ;# n-1 fib fib
- over 2 ;# n-1 fib fib n-1
- invokeStk 2 ;# n-1 fib fib(n-1)
- reverse 3 ;# fib(n-1) fib n-1
- push 1 ;# fib(n-1) fib n-1 1
- sub ;# fib(n-1) fib n-2
- invokeStk 2 ;# fib(n-1) fib(n-2)
- add ;# fib(n)
- label done ;# result
- }
- }
- puts [time {set result [fib 34]}]
- puts "fib(34) = $result"