Posted to tcl by jima at Tue Sep 25 21:47:17 GMT 2018view raw

  1. proc PatExpand {R pa {sub {}} {i 0} {buf {}}} {
  2. set L [llength $pa]
  3. for {} {$i < $L} {incr i} {
  4. set new [list {*}$sub [lindex $pa $i]]
  5. foreach {x1 x2 x3} $R {
  6. if {$x1 in $new && $x2 in $new && $x3 in $new} {
  7. return $buf
  8. }
  9. }
  10. lappend buf $new
  11. set buf [PatExpand $R $pa $new [expr {$i+1}] $buf[set buf {}]]
  12. }
  13. return $buf
  14. }