疑似乱数を作ってみる
30分プログラム、その399。疑似乱数を作ってみる。
より正確には疑似乱数を計算する関数を返す関数を作った。疑似乱数の種を与えると、疑似乱数を計算する関数を返すやつ。
あと、ひとつ前の乱数を保存するために、ローカル変数とクロージャを組合せてみた。Closure is a poor man's object !
使い方
gosh> (define r (rand 673 944)) r gosh> (r) 92 gosh> (r) 28 gosh> (r) 97 gosh> (r) 62 gosh> (r) 26 gosh> (r) 84
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; random.scm - ;; ;; Copyright(C) 2008 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2008/10/23 22:16:29 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (define (rand p q) (let1 a 42 (lambda () (let1 b (modulo (quotient (+ (* a p) q) 100) 100) (set! a b) b))))