wc_avg.scm
30分プログラム、その19。
ファイルの平均行数を計算するプログラム。
$ gosh wc_avg.scm msort.rb 32.0 $ gosh wc_avg.scm sieve.rb 75.0 $ gosh wc_avg.scm msort.rb sieve.rb 53.5
ちなみに、これでいままでの30分プログラムの平均行数を調べたところ、次のようになった。
言語 | 平均行数 |
---|---|
Perl | 32.4 |
Python | 37.8 |
Ruby | 30.5 |
Scheme | 24.25 |
総合 | 31.5 |
うん、だいたい感覚と一致している。まあ、いつも同じ難易度のプログラムではないからそれほど意味のあるデータではないけれど。
(use srfi-1) (define (count-line str) (length (string-split str "\n"))) (define (read-content filename) (call-with-input-file filename (lambda(io) (port->string io)))) (define (sum vals) (fold + 0 vals)) (define (avg vals) (/ (sum vals) (length vals))) (define (avg-line-count filenames) (avg (map (lambda(x) (count-line (read-content x))) filenames))) (define (main args) (format #t "~d~%" (exact->inexact (avg-line-count (cdr args)))))