ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

関数型言語コミュのscheme初心者なのですが。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今、学校でschemeを学んでいるのですが、課題が解けなくて困ってます。
どなたかよかったら教えてください。
DrScheme, version 360, englishを使っています。

課題は
1、エラトステネスの篩の考え方を用いて、n以下の素数を求める。
2、ボールを動かすプログラム.
1.0 複数のボールを動かすプログラム.
1.1 境界まで達したら,跳ね返りの角度や速度などを変えて,跳ね返る.
N回跳ね返れば終了する.
1.2 動いている間にボールの大きさや色が変る.

1、は

(define (n-list n k);;K=2
(cond
[(= n k) (cons n empty)]
[else (cons k (n-list n (+ k 1)))]))

(define (remove alist)
(cond
[(empty? alist) empty]
[(even? (first (rest alist)))
(cons (first alist) (remove (rest (rest alist))))]
[else (cons (first alist) (remove (rest alist)))]))

(define (remain x y)
(cond
[(= 0 (remainder x y)) true]
[else false]))

まで

2、は

(define-struct DISK
(x y radius))
(define-struct PARTICLE
(x y z delta-x delta-y delta-z))
(define (eliminate-near-particles particles c)
(local
((define (far-particle? p)
(>= (PARTICLE-z p) c)))
(filter far-particle? particles)))
(define (advance-each-particle p)
(make-PARTICLE
(+ (PARTICLE-x p) (PARTICLE-delta-x p))
(+ (PARTICLE-y p) (PARTICLE-delta-y p))
(+ (PARTICLE-z p) (PARTICLE-delta-z p))
(PARTICLE-delta-x p)
(PARTICLE-delta-y p)
(PARTICLE-delta-z p)))
(define RADIUS 100)
(define (particle-to-disk p)
(make-DISK (/ (PARTICLE-x p) (PARTICLE-z p))
(/ (PARTICLE-y p) (PARTICLE-z p))
(/ RADIUS (PARTICLE-z p))))
(define CANVAS_WIDTH 600)
(define CANVAS_HEIGHT 600)
(define DISK_COLOR 'blue)
(define (draw-disk-on-canvas d)
(begin
(draw-solid-disk
(make-posn
(+ (* (DISK-x d) (/ CANVAS_WIDTH 2)) (/ CANVAS_HEIGHT 2))
(+ (* (DISK-y d) (/ CANVAS_WIDTH 2)) (/ CANVAS_HEIGHT 2)))
(round (DISK-radius d))
DISK_COLOR)
true
))
(define NEAR 1)
(define (render particles)
(begin
(draw-solid-rect (make-posn 0 0)
CANVAS_WIDTH
CANVAS_HEIGHT
'white)
(map draw-disk-on-canvas
(map particle-to-disk
(eliminate-near-particles particles NEAR)))))
(define (animate particles now until)
(cond
[(>= now until) true]
[else
(begin
(sleep-for-a-while 0.1)
(render particles)
(animate (map advance-each-particle particles)
(+ now 1) until))]))
(define (rand x)
(/ (- (random (* x 200)) (* x 100)) 100))
(define (gen-particles n b v)
(cond
[(= n 0) empty]
[else (cons (make-PARTICLE
(rand b) (rand b) (+ (rand b) b)
(rand v) (rand v) (rand v))
(gen-particles (sub1 n) b v))]))
(define A (gen-particles 100 5 0.1))
(start CANVAS_WIDTH CANVAS_HEIGHT)
(animate A 0 100)

までできていて、2は動いている間にボールの大きさや色をかえる方法がわかりません。

コメント(1)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

関数型言語 更新情報

関数型言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。