EoPL reading (36) 1.3.1 Free and Bound Variables

Exercise.1-26

そういえば、出社途中に試験が足りてないかも、な事に思い至る。
まず、test-occurs-free.scm に以下な試験を追加。

(test* "(occurs-free? 'x '(lambda (y) (set! y x))) should return #t"
       #t
       (occurs-free? 'x '(lambda (y) (set! y x))))
(test* "(occurs-free? 'x '(lambda (x) (set! y x))) should return #f"
       #f
       (occurs-free? 'x '(lambda (x) (set! y x))))

上側の試験は lambda の引数が x ではないのでダウト。下側は occurs bound ですな。あるいは test-occurs-bound.scm にも同様のナニを追加。

(test* "(occurs-bound? 'x '(lambda (y) (set! y x))) should return #f"
       #f
       (occurs-bound? 'x '(lambda (y) (set! y x))))
(test* "(occurs-bound? 'x '(lambda (x) (set! y x))) should return #t"
       #t
       (occurs-bound? 'x '(lambda (x) (set! y x))))

大丈夫とは思ってたんですが、一応きちんと動いてます。
あと、Exercise.1-31 ですが、ぱっと見ハードル高い? って思ったら星二つ。Ex.1-23 版のソレを使って云々なんだろな、と思ってはいるのですが、そろそろ寝ます。