いつ、どこで、誰が、何をしたジェネレータ

30分プログラム、その699。いつ、どこで、誰が、何をしたジェネレータ。
ランダムに文章を生成するよ! Printfがとっても欲しいよ!

使い方

昨日、海でキミが寝たval it = () : unit
- println (make ());
昨日、地の中で知らない人が食事をした
val it = () : unit
- println (make ());
昨日、山でキミが戦った

ソースコード

val when   = ["すごい昔", "昨日", "今日", "明日", "すごい未来"];
val where_ = ["海", "山", "川", "地の中", "月"];
val who    = ["ボク", "キミ", "知らない人"];
val what   = ["寝た", "戦った", "食事をした", "踊った"];

fun srand () =
    let
        val d = Date.fromTimeLocal (Time.now ())
        val m = Date.minute d
        val s = Date.second d
    in
        Random.rand (m,s)
    end;

fun choice r xs =
    let
	val n = List.length xs
	val i = (Random.randInt r) mod n
    in
	List.nth (xs,i)
    end;

fun println s = (print s; print "\n");

fun make () =
    let
	val r = srand ()
    in
	String.concat [
	choice r when, "、",
	choice r where_, "で",
	choice r who, "が",
	choice r what
	]
    end;