評価したりしなかったり

Schemeの式って同じような位置にあるのに同じタイミングで評価したりしなかったりする。
たとえば(if test then else)って感じに全部同じようにならんでるけどtestを評価した後thenかelseを評価しないといけない。他にも(define v e)なんかもeは評価するけどこれから束縛される予定のvは評価しちゃいけない。前は再帰呼び出しできたからかなり簡単に作れたんだけど、どう作るとシンプルにできるだろうか。
今のところそれ以降ならんでる式を全部評価しないものと全部評価するもので分けてるのだけど、この分類でいくとたくさんの構文がこの中間になってしまう。今のところ先に評価する部分と後で評価する部分に分かれるよう変形して対応する予定。
継続をお手軽に扱おうとするといろいろ一筋縄じゃいかなくなる様子。