tabulate.sc
(define *n* 3)
(define (best l) (reduce min l infinity))
(define (skip string strings)
(if (substring? string (first strings))
strings
(skip string (rest strings))))
(define (skipn string i strings)
(skip (string-append string " " (number->string i)) strings))
(define (ikarus-u+s string lines)
(best
(map-n
(lambda (i)
(/ (string->number
(field-ref (first (skip "elapsed cpu time" (skipn string i lines))) 0))
1000))
*n*)))
(define (u+s string lines)
(best
(map-n
(lambda (i)
(+ (string->number
(list->string
(but-last
(string->list
(field-ref (first (skip "pf+" (skipn string i lines))) 0)))))
(string->number
(list->string
(but-last
(string->list
(field-ref (first (skip "pf+" (skipn string i lines))) 1)))))))
*n*)))
(define (larceny-u+s string lines)
(best
(map-n
(lambda (i)
(/ (+ (string->number
(field-ref (first (skip "Elapsed time" (skipn string i lines))) 5))
(string->number
(field-ref (first (skip "Elapsed time" (skipn string i lines))) 8)))
1000))
*n*)))
(define (scmutils-u+s string lines)
(best
(map-n
(lambda (i)
(+ (string->number
(field-ref
(first
(skip "Timings:" (rest (skip "Timings:" (skipn string i lines)))))
1))
(string->number
(field-ref
(first
(skip "Timings:" (rest (skip "Timings:" (skipn string i lines)))))
2))))
*n*)))
(call-with-output-file "run.tex"
(lambda (run)
(let* ((lines (read-file "run.text"))
(saddle-ikarus (ikarus-u+s "saddle Ikarus" lines))
(saddle-stalin (u+s "saddle Stalin" lines))
(saddle-s2c (u+s "saddle Scheme->C" lines))
(saddle-chicken (u+s "saddle Chicken" lines))
(saddle-bigloo (u+s "saddle Bigloo" lines))
(saddle-gambit (u+s "saddle Gambit" lines))
(saddle-larceny (larceny-u+s "saddle Larceny" lines))
(saddle-mzc (u+s "saddle MzC" lines))
(saddle-mzscheme (u+s "saddle MzScheme" lines))
(saddle-scmutils (scmutils-u+s "saddle Scmutils" lines))
(saddle-mlton (u+s "saddle MLton" lines))
(saddle-smlnj (u+s "saddle SML/NJ" lines))
(saddle-ocaml (u+s "saddle OCaml" lines))
(saddle-ghc (u+s "saddle GHC" lines))
(saddle-fadbad++ (u+s "saddle FADBAD++" lines))
(saddle-adifor (/ (u+s "saddle ADIFOR" lines) 1000))
(saddle-tapenade (/ (u+s "saddle Tapenade" lines) 1000))
(saddle-stalingrad (/ (u+s "saddle Stalingrad" lines) 1000))
(particle-ikarus (ikarus-u+s "particle Ikarus" lines))
(particle-stalin (u+s "particle Stalin" lines))
(particle-s2c (u+s "particle Scheme->C" lines))
(particle-chicken (u+s "particle Chicken" lines))
(particle-bigloo (u+s "particle Bigloo" lines))
(particle-gambit (u+s "particle Gambit" lines))
(particle-larceny (larceny-u+s "particle Larceny" lines))
(particle-mzc (u+s "particle MzC" lines))
(particle-mzscheme (u+s "particle MzScheme" lines))
(particle-scmutils (scmutils-u+s "particle Scmutils" lines))
(particle-mlton (u+s "particle MLton" lines))
(particle-smlnj (u+s "particle SML/NJ" lines))
(particle-ocaml (u+s "particle OCaml" lines))
(particle-ghc (u+s "particle GHC" lines))
(particle-fadbad++ (u+s "particle FADBAD++" lines))
(particle-adifor (/ (u+s "particle ADIFOR" lines) 1000))
(particle-tapenade (/ (u+s "particle Tapenade" lines) 1000))
(particle-stalingrad (/ (u+s "particle Stalingrad" lines) 1000)))
(format run "\\begin{tabular}{l@{\\hspace{1em}}*{18}{r@{\\hspace{8pt}}}}~%")
(format run "\\toprule~%")
(format run "&\\multicolumn{18}{c}{\\textbf{Language/Implementation}}\\\\~%")
(format run "\\cmidrule{2-19}~%")
(format run "\\textbf{Example}~%")
;; Technically should be \GambitC
(format run "&\\Stalingrad&\\Ikarus&\\Stalin&\\SchemeToC&\\Chicken&\\Bigloo&\\Gambit&\\Larceny&\\MzC&\\MzScheme&\\SCMUTILS&\\MLton&\\SMLNJ&\\OCaml&\\GHC&\\FADBADplusplus&\\ADIFOR&\\Tapenade\\\\~%")
(format run "\\midrule~%")
(format run "\\texttt{saddle}&1.00&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a\\\\~%"
(number->string-of-length-and-precision
(/ saddle-ikarus saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-stalin saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-s2c saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-chicken saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-bigloo saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-gambit saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-larceny saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mzc saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mzscheme saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-scmutils saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mlton saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-smlnj saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-ocaml saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-ghc saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-fadbad++ saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-adifor saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-tapenade saddle-stalingrad) 7 2))
(format run "\\texttt{particle}&1.00&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a\\\\~%"
(number->string-of-length-and-precision
(/ particle-ikarus particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-stalin particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-s2c particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-chicken particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-bigloo particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-gambit particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-larceny particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mzc particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mzscheme particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-scmutils particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mlton particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-smlnj particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-ocaml particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-ghc particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-fadbad++ particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-adifor particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-tapenade particle-stalingrad) 7 2))
(format run "\\bottomrule~%")
(format run "\\end{tabular}~%"))))
(call-with-output-file "run.html"
(lambda (run)
(let* ((lines (read-file "run.text"))
(saddle-ikarus (ikarus-u+s "saddle Ikarus" lines))
(saddle-stalin (u+s "saddle Stalin" lines))
(saddle-s2c (u+s "saddle Scheme->C" lines))
(saddle-chicken (u+s "saddle Chicken" lines))
(saddle-bigloo (u+s "saddle Bigloo" lines))
(saddle-gambit (u+s "saddle Gambit" lines))
(saddle-larceny (larceny-u+s "saddle Larceny" lines))
(saddle-mzc (u+s "saddle MzC" lines))
(saddle-mzscheme (u+s "saddle MzScheme" lines))
(saddle-scmutils (scmutils-u+s "saddle Scmutils" lines))
(saddle-mlton (u+s "saddle MLton" lines))
(saddle-smlnj (u+s "saddle SML/NJ" lines))
(saddle-ocaml (u+s "saddle OCaml" lines))
(saddle-ghc (u+s "saddle GHC" lines))
(saddle-fadbad++ (u+s "saddle FADBAD++" lines))
(saddle-adifor (/ (u+s "saddle ADIFOR" lines) 1000))
(saddle-tapenade (/ (u+s "saddle Tapenade" lines) 1000))
(saddle-stalingrad (/ (u+s "saddle Stalingrad" lines) 1000))
(particle-ikarus (ikarus-u+s "particle Ikarus" lines))
(particle-stalin (u+s "particle Stalin" lines))
(particle-s2c (u+s "particle Scheme->C" lines))
(particle-chicken (u+s "particle Chicken" lines))
(particle-bigloo (u+s "particle Bigloo" lines))
(particle-gambit (u+s "particle Gambit" lines))
(particle-larceny (larceny-u+s "particle Larceny" lines))
(particle-mzc (u+s "particle MzC" lines))
(particle-mzscheme (u+s "particle MzScheme" lines))
(particle-scmutils (scmutils-u+s "particle Scmutils" lines))
(particle-mlton (u+s "particle MLton" lines))
(particle-smlnj (u+s "particle SML/NJ" lines))
(particle-ocaml (u+s "particle OCaml" lines))
(particle-ghc (u+s "particle GHC" lines))
(particle-fadbad++ (u+s "particle FADBAD++" lines))
(particle-adifor (/ (u+s "particle ADIFOR" lines) 1000))
(particle-tapenade (/ (u+s "particle Tapenade" lines) 1000))
(particle-stalingrad (/ (u+s "particle Stalingrad" lines) 1000)))
(format run "<table border=\"3\" frame=\"all\" rules=\"all\" cellpadding=\"3%\" summary=\"example\">~%")
(format run "<caption align=\"bottom\">~%")
(format run "Run times of the examples, normalized relative to a unit run time for <span style=\"font-variant: small-caps;\">Stalingrad</span>~%")
(format run "</caption>~%")
(format run "<tr>~%")
(format run "<th rowspan=\"2\"></th>~%")
(format run "<th align=\"center\" colspan=\"18\">Language/Implementation</th>~%")
(format run "</tr>~%")
(format run "<tr>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Stalingrad</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Ikarus</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Stalin</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Scheme</span>->C</th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Chicken</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Bigloo</span></th>~%")
;; Technically should be Gambit-C
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Gambit</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Larceny</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MzC</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MzScheme</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">scmutils</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MLton</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">sml/nj</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">OCaml</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">ghc</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">fadbad</span>++</th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">adifor</span></th>~%")
(format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Tapenade</span></th>~%")
(format run "</tr>~%")
(format run "<tr>~%<th align=\"left\"><tt>saddle</tt></th>~%<td align=\"right\"> 1.00</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%</tr>~%"
(number->string-of-length-and-precision
(/ saddle-ikarus saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-stalin saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-s2c saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-chicken saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-bigloo saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-gambit saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-larceny saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mzc saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mzscheme saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-scmutils saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-mlton saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-smlnj saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-ocaml saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-ghc saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-fadbad++ saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-adifor saddle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ saddle-tapenade saddle-stalingrad) 7 2))
(format run "<tr>~%<th align=\"left\"><tt>particle</tt></th>~%<td align=\"right\"> 1.00</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%</tr>~%"
(number->string-of-length-and-precision
(/ particle-ikarus particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-stalin particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-s2c particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-chicken particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-bigloo particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-gambit particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-larceny particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mzc particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mzscheme particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-scmutils particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-mlton particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-smlnj particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-ocaml particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-ghc particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-fadbad++ particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-adifor particle-stalingrad) 7 2)
(number->string-of-length-and-precision
(/ particle-tapenade particle-stalingrad) 7 2))
(format run "</table>~%"))))
Generated by GNU enscript 1.6.4.