(def make-tetromino (typ) (withs ((base color) (case typ I '(((0 . 0) (1 . 0) (-1 . 0) (-2 . 0)) "#0FF") O '(((0 . 0) (1 . 0) (1 . 1) (0 . 1)) "#FF0") T '(((0 . 0) (0 . 1) (1 . 0) (-1 . 0)) "#F0F") J '(((0 . 0) (-2 . 0) (-1 . 0) (0 . 1)) "#00F") L '(((0 . 0) (0 . 1) (1 . 0) (2 . 0)) "#F70") S '(((0 . 0) (1 . 0) (0 . 1) (-1 . 1)) "#0F0") Z '(((0 . 0) (-1 . 0) (0 . 1) (1 . 1)) "#F00")) p '(4 . 0) origin (fn (p) (fn ((x . y)) (cons (+ car.p x) (+ cdr.p y)))) get (fn (p) (map1 origin.p base))) (rfn tetromino (cmd (o arg nil)) (case cmd color color get (get p) draw (each pn (get p) (draw car.pn cdr.pn color)))))) (= t1 (make-tetromino 'Z)) (t1 'draw)
実行