(define (square x) (* x x)) (define (cube x) (* x (square x))) (define (shikoku? x) (or (eq? x 'kagawa) (eq? x 'tokushima) (eq? x 'ehime) (eq? x 'kochi))) (define (accute? x) ; 鋭角か? (and (>= x 0) (< x 90))) (define (hen_na_square x) (set! x (* x x)) x) (define (bar y) (set! x (+ x y))) (define (2-ji-houtei-shiki a b c) (let ((D (- (* b b) (* 4 a c)))) (if (> D 0) (let ((sqrt-d (sqrt D))) (list (/ (+ (- b) sqrt-d) (* 2 a)) (/ (- (- b) sqrt-d) (* 2 a)))) '()))) (define (baz x) (let* ((y (list x x)) (z (list y y))) (list z z))) (define (qux x) (set! x (* x x)) x) (define (fact n) (if (= n 1) 1 (* n (fact (- n 1))))) (define (fern g d x y r t) ; (x, y) --- 付け根の位置, r --- 長さ, t --- 角度 (if (= d 0) #t (let ((dx (* r (cos t))) (dy (* r (sin t)))) (graphics-draw-line g x y (+ x dx) (+ y dy)) (fern g (- d 1) ; 幹 (+ x (* 1.0 dx)) (+ y (* 1.0 dy)) (* r 0.7) (+ t 0.17)) (fern g (- d 1) ; 右の枝 (+ x (* 0.45 dx)) (+ y (* 0.45 dy)) (* r 0.45) (- t 1.40)) (fern g (- d 1) ; 左の枝 (+ x (* 0.55 dx)) (+ y (* 0.55 dy)) (* r 0.40) (+ t 1.30))))) ;(define (fact n) ; (do ((i 1 (+ i 1)) ; (r 1 (* r i))) ; ((> i n) r) ; #t)) ; ここでは何もする必要がないので適当な式を書いておく。 (define PI 3.1416) (define PI_2 (/ PI 2)) (define (draw-ngon g x y r t n) (do ((delta (/ (* 2 PI) n) delta) ; 最後の deltaは省略可 (i 0 (+ i 1))) ((>= i n) #t) ; #tに特別な意味はない (let ((theta1 (+ (* delta i) t)) (theta2 (+ (* delta (+ i 1)) t))) (graphics-draw-line g (* r (cos theta1)) (* r (sin theta1)) (* r (cos theta2)) (* r (sin theta2)))))) (define (hanoi n a b c) ; n個の円盤を棒 aから棒 bに (if (= n 1) (move_disk_from_to 1 a b) (begin \myspace{(hanoi (- n 1) a c b)} (move_disk_from_to n a b) \myspace{(hanoi (- n 1) c b a )} ))) (define (move_disk_from_to d a b) (display "Move disk ") (display d) (display " from ") (display a) (display " to ") (display b) (newline))