Posted to tcl by mjanssen at Thu May 27 12:56:51 GMT 2021view pretty
proc combinations { list size } { if { $size == 0 } { return [list [list]] } set retval {} for { set i 0 } { ($i + $size) <= [llength $list] } { incr i } { set firstElement [lindex $list $i] set remainingElements [lrange $list [expr { $i + 1 }] end] foreach subset [combinations $remainingElements [expr { $size - 1 }]] { lappend retval [linsert $subset 0 $firstElement] } } return $retval } set res {} for {set l 1} {$l <= [llength { a b c}]} {incr l} { lappend res {*}[combinations {a b c} $l] } set res