Posted to tcl by jima at Tue Sep 25 21:47:17 GMT 2018view pretty
proc PatExpand {R pa {sub {}} {i 0} {buf {}}} { set L [llength $pa] for {} {$i < $L} {incr i} { set new [list {*}$sub [lindex $pa $i]] foreach {x1 x2 x3} $R { if {$x1 in $new && $x2 in $new && $x3 in $new} { return $buf } } lappend buf $new set buf [PatExpand $R $pa $new [expr {$i+1}] $buf[set buf {}]] } return $buf }