#!/usr/bin/tclsh # vi:set ts=8 sw=4 sta et: # # Author: Clark J. Wang # # $Date$ # $HeadURL$ # $Revision$ # #--------------------------------------------------------------------# proc split_num { n {min 1} } { if { $n < $min } { return {} } elseif { $n < 2 * $min } { return $n } set list1 {} for {set i $min} {$i <= $n / 2} {incr i} { set list2 [split_num [expr $n - $i] $i] foreach list3 $list2 { set list3 [linsert $list3 0 $i] lappend list1 $list3 } } lappend list1 $n return $list1 } #-- main ------------------------------------------------------------# if 1 { set nInput [lindex $argv 0] if { ! [string is integer $nInput] || $nInput <= 0 } { puts stderr ">>> only positive integers supported" exit 1 } set result [split_num $nInput] set bFirst 0 foreach nList $result { if { ! $bFirst } { set bFirst 1 puts -nonewline "$nInput = " } else { puts -nonewline [format "%*s = " [string length $nInput] " "] } puts -nonewline [lindex $nList 0] foreach n [lrange $nList 1 end] { puts -nonewline " + $n" } puts "" } }