プログラミング言語I

ランダム2

(sys-random)が
 偶数なら 表
 奇数なら 裏
と みなすとよいね

 整数を引数としたとき
 商を求める手続きは 
  quotient 

 整数を引数としたとき
 剰余を求める手続きは 
   modulo 
 または 
   remainder

(quotient 10 7)
(modulo 10 7)
(remainder 10 7)

(quotient 10 7) →  1
(modulo 10 7) → 3
(remainder 10 7)  → 3

				    

(even? (sys-random))

偶数か?
				    

(zero? (modulo (sys-random) 2))

2で割った余りが0か?
				    

(= (modulo (sys-random) 2) 0)

2で割った余りが0と等しいか
				    

(integer? (/ (sys-random) 2)) 2で割った数が 整数になるか?

任意の n aで
(= 
 (+ (* (quotient n a) a)
    (modulo n a))
 n)
なので

(define tmp (sys-random))
(= (* (quotient tmp 2) 2)  tmp)

局所変数の let を使うと

(let ((tmp (sys-random))) 
  (= (* (quotient tmp 2) 2) tmp))

(define goosuu? (lambda (n) (integer? (/ n 2))))
として
(goosuu? (sys-random))
偶数か?を判定する としたほうが、偶数か?どうか を判定していることが 分かりやすくなるよ
(integer? (/ (sys-random) 2))
と、書いて後からこれを読んだ時に 即座に 偶数か?を判定するコードとは 気づきにくよね

ジャンケンは3通りなので なので 3で割った余りを考える よい