Posted to tcl by kbk at Tue Aug 17 22:37:31 GMT 2010view raw
- proc cfhomo {a b c d x} {
- while {1} {
- # Egest what terms we can
- while {1} {
- set prod [* $c $d]
- if {$prod == Inf || $prod <= 0} break
- set qcoef [/ $a $c]
- set rcoef [% $a $c]
- set qconst [/ $b $d]
- set rconst [% $b $d]
- if {$qconst != $qcoef} break
- Yield $qconst [list $x 1]
- lassign [list $c $d $rcoef $rconst] a b c d
- }
- # Ingest the next term of the input
- set t [$x]
- if {$t == Inf} {
- tailcall cfint/int $a $c
- }
- lassign [list [expr {$t*$a + $b}] $a [expr {$t*$c + $d}] $c] a b c d
- }
- }