2006/07/26

* 「各要素が「0または1をとる乱数」から成る長さnのリストを得よ」
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-07-10

「乱数」っていう用語は、とてもあいまい。たとえばこんなのは?
(use math.const)
(use util.stream)

(define so-pseudo-random
(let ((PIchop (let R1 ((x pi))
(stream-cons (floor x) (R1 (* (fmod x 1) 10))))))
(let R ((s PIchop))
(if (odd? (stream-car s))
(stream-cons 1 (R (stream-cdr s)))
(stream-cons 0 (R (stream-cdr s)))))))

gosh>(stream->list (stream-take so-pseudo-random 30))
(1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0)


ようするに円周率の各桁の偶奇に応じて 0 か 1 を出力しているだけだけど、乱数といえないことはない。ただし当たり前だけど暗号化処理のシードに使ったりするわけにはいかない。予測可能だから。(math.const で提供されている定数を使っているからそのうち 0 が続いてしまう問題には目をつぶったとしても)

以下は宣伝モード。
乱数については、発売したばかりのこちらの書籍もどうぞ。やたらに広範な話題に及んでいるので拾い読みがお勧め。

『Building Secure Software』
http://www.amazon.co.jp/gp/product/427406655X

原書は少し前に出た本なんだけど、翻訳書は適宜監訳注が入ってるので不便はないはず。


ところで出題元の"Open Source WEB"では7月10日の日付になっているけど、Bloglinesにはついさっきようやく入ってきた。どうしてこんなに遅いんだろう。

No comments :