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
}