EoPL 読んでた記録の確認とその記録 (5)

たまにはこちらに現実トウヒ、ってここも不具合が直らない、で終わってるorz
とりあえず

(test* "if expression more"
       '(if-exp (app-exp (free-info null?) (free-info l))
		(free-info l)
		(lit-exp 1))
       (parse-expression '(if (null? l) l 1)))

な試験は app-exp な定義の都合上、あきらめることに。free ではない変数の試験がまだなのか。
以下の試験を追加してパス確認。

(test* "lex-info expression"
       '(lambda-exp (x) (lex-info x 0 0))
       (parse-expression '(lambda (x) x)))
(test* "lex-info expression (2)"
       '(lambda-exp (x) 
		    (lambda-exp (y) 
				(if-exp (app-exp 
					 (free-info null?) (lex-info x 1 0)) 
					(lex-info y 0 0) 
					(lit-exp 1))))
       (parse-expression '(lambda (x) (lambda (y) (if (null? x) y 1)))))
(test* "lex-info expression (3)"
       '(lambda-exp (x y) 
		    (lambda-exp (a b) 
				(if-exp (app-exp (free-info null?) (lex-info y 1 1)) 
					(app-exp (free-info car) (lex-info x 1 0)) 
					(app-exp (free-info cdr) (lex-info b 0 1)))))
       (parse-expression '(lambda (x y) (lambda (a b) 
					  (if (null? y) (car x) (cdr b))))))

で、unparse の方も parse の逆の試験でパスしました。何故にあそこまでハマッていたのかが不思議な位さくっとできてしまってびっくり。

とりあえず

リポジトリに push して今日は早めに休みます。