文字の種類カウント付きwc

30分プログラム、その383。
setクラスをちょうど読んだので、使ってみた。普通のwcに加えて、単語の種類も追加してみた。

あと、Scalaコンパイルするには、objectで包まなければならないらしい。そういえばそんなことが書いてあった気がする。

使い方

$ scalac Words.scala
$ scala Words hoge.html
      29      94      58     633 hoge.html

ソースコード

import scala.io.Source

object Words {
  def lines(str : String) : Seq[String] =
    str.split("\n")

  def words(str : String) : Seq[String] =
    str.split("[^a-zA-Z]+")

  def uniq_count(words : Seq[String]) : Int = {
    var set = Set() ++ words
    set.size
  }

  def main(args: Array[String]){
    for(arg <- args){
      val content = Source.fromFile(arg).mkString("")
      val c = content.size
      val l = lines(content).size
      val w = words(content)
      val uniq    = uniq_count(w)
      
      printf(" %7d %7d %7d %7d %s\n",l,w.size,uniq,c,arg)
    }
  }
}