DecisionTable を書くのに全パターンを書くのはとても面倒。面倒なことはコンピュータにやらせよう。
ということで、Ruby で書いてみた。
class DecisionTable attr_accessor :patterns def initialize(patterns = []) @patterns = patterns end def horizontal rows end def vertical rows.transpose end def table format_table vertical end private def rows pattern_map(1, @patterns.dup) end def pattern_repeats(patterns) return 1 if patterns.empty? patterns.map {|r| r.size }.inject {|r, n| r * n } end def pattern_map(repeat, patterns) return [] if patterns.empty? pattern = patterns.shift return pattern.map {|p| [p] * repeat }.flatten * pattern_repeats(patterns), *pattern_map(repeat * pattern.size, patterns) end def format_table(table) table.map {|r| format_row r }.join("\n") end def format_row(row, separator="\t") row.map {|c| "\"#{c}\"" }.join(separator) end end if __FILE__ == $0 patterns = [ %w{m f}, %w{5 10 15}, %w{5 10 15}, %w{0-10 11-45 45-60 60-65} ] dt = DecisionTable.new(patterns) puts dt.table end
出力を Excel に貼って、各パターンの結果を書けばルールテーブルのできあがり。