(define (f x y) (cos (+ (* 3 x) (* 5 y))))特に説明は要らないでしょう。なお、Schemeの cos関数は、 (他の多くのプログラミング言語の cos関数と同様に) 角度の単位はラジアンです。
(define (g x) (exp (/ 1 (* x x))))これも、特に説明は要らないでしょう。
(define (max3 x y z) (if (> x y) (if (> x z) x z) (if (> y z) y z)))比較は 2回で済みます。
(define (mid3 x y z) (if (> x y) (if (> y z) y ; x > y > z (if (> z x) x ; z > x > y z)) ; x > z > y (if (> x z) x ; y > x > z (if (> z y) y ; z > y > x z))))3回の比較が必要になる場合があります。
(define (foo g x1 y1 x2 y2) (graphics-draw-line g x1 y1 x2 y1) (graphics-draw-line g x2 y1 x1 y2) (graphics-draw-line g x1 y2 x2 y2) (graphics-draw-line g x2 y2 x1 y1))これを実行するには次のようにします。
(define gd (make-graphics-device #f)) (foo gd 0 0 1 1)
(define (gcd m n) (if (= n 0) m (gcd n (modulo m n))))mとnの大小を気にしている人がいましたが、 m<nの時でもこれで大丈夫です。
(参考)ディオファントゥス方程式 a x + b y = c の解き方
(define (binary n) (if (= n 0) '() (cons (modulo n 2) (binary (quotient n 2)))))ただし、この場合、結果が逆順になります。 (binary 11)は (1 1 0 1)です。
通常の順番にするには、引数を増やした補助関数を定義します。
(define (binary-aux n acc) (if (= n 0) acc (binary-aux (quotient n 2) (cons (modulo n 2) acc)))) (define (binary n) (binary-aux n '()))引数を増やした補助関数を定義するのは、良く使うテクニックです。
; 日曜 -- 0, 月曜 -- 1, 火曜 -- 2, ..., 土曜 -- 7 (define (taiiku-no-hi y) (let* ((day (zeller y 10 8)) ; y年 10月 8日の曜日 (rest (modulo (- 1 day) 7))) ; 次の月曜まで、あと何日か? (+ 8 rest)))8日は第2週の最初の日です。8日以降の最初の月曜日が第 2月曜日です。 例えば、8日が火曜日の時、dayの値は火曜日を表す数の 2になります。 月曜日は 1で表されるので、 月曜日までの日数は 1-2を 7で割った余りとして求められます。