/var/log/messages

debugging with sixth sense

EoPL の Exercise 2.13

試験スルーで軽く、ということで勘弁してもらう方向。 unparse が以下なのかどうか。

(define unparse-expression
  (lambda (exp)
    (cases term exp
      (var-term (id) id)
      (constant-term (datum) datum)
  (app-term (terms)
        (let app-term-unparse ((terms terms) (ret '()))
          (if (null? terms)
              (reverse ret)
              (app-term-unparse (cdr terms) (cons (unparse-expression (car terms)) ret))))))))

あるいは parse-expression が以下?

(define parse-expression
  (lambda (datum)
    (cond
      ((symbol? datum) (var-exp datum))
      ((constant? datum) (constant-term datum))
      (((list-of -term?) datum) (app-term datum)))))

これは酷い。(list-of term?) をスルーすべきかどうか迷うな。list-of てソレが実在するのかどうかは別途確認の方向にて。

all-ids

ということでスルー。Ex.2.10 の all-ids の定義が以下。

(define all-ids
  (lambda (exp)
    (delete-duplicates (flatten (enum-ids exp)))))

enum-ids を書換えてみます。

(define enum-ids
  (lambda (exp)
    (cases term exp
      (var-exp (id) id)
      (constant-term (datum) '())
      (app-term (terms)
        (let app-term-enum ((terms terms) (ret '()))
          (if (null? terms)
              ret
              (app-term-enum (cdr terms) (cons (enum-ids (car terms)) ret))))))))

Comments