/dev/randomから読み込むプログラム

30分プログラム、その688。/dev/randomから読み込むプログラム。

聞くところによると/dev/randomは無限に乱数が書いてある(ように見える)ファイルらしいです。
聞いたことはあっても試したことがないので、読み込むプログラムを作ってみました。数字を延々と表示されても困るので適当な回数で打ち切って、それぞれの値が何回出現したかをカウントしてみました。

使い方

$ gosh random.scm
1 31
2 28
3 35
...
253 32
254 33
255 41

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; random.scm -
;;
;; Copyright(C) 2009 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2009/11/03 21:46:15
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;
(use srfi-1)
(define (repeat n f)
  (if (< 0 n)
      (begin (f)
	     (repeat (- n 1) f))))

(define table (make-hash-table))
(define count 10000)
(call-with-input-file "/dev/random"
  (lambda (iport)
    (repeat count
     (lambda()
       (let1 byte (read-byte iport)
	  (hash-table-put! table
			   byte
			   (+ 1 (hash-table-get table byte 0))))))))

(for-each (lambda (i) (print i " "  (hash-table-get table i 0)))
	  (iota 256))