SICP 読み (84) 2.5.3 例: 記号代数

問題 2.90 の続き

ナチュラルが原因の bug も取れたので試験再開。がしかし ...
add な試験をいくつか追加して、mul の試験に。1x1 な試験を書いたら

*** ERROR: unbound variable: the-empty-termlist

なご指摘が。これ、てきとーなゴマカシ方してるんだよなぁ。仕方が無いんで引数渡すか。何か良い方法は無いモノか。

 (define (mul-terms L1 L2)
   (if (empty-termlist? L1)
;       (the-empty-termlist)
       L1
       (add-terms (mul-term-by-all-terms (first-term L1) L2)
                  (mul-terms (rest-terms L1) L2))))

 (define (mul-term-by-all-terms t1 L)
   (if (empty-termlist? L)
;       (the-empty-termlist)
       L
       (let ((t2 (first-term L)))
         ((adjoin-term (mul-term-by-all-terms t1 (rest-terms L)))
          (make-term (+ (order t1) (order t2))
                     (mul (coeff t1) (coeff t2)))))))

これはこれで微妙だなぁ。一応試験は通ります (当たり前
とりあえずこれで残りは力仕事だけだと願いたひ。

neg

と思ったら neg な試験でコケた。で、これを

 (define (neg-terms L)
   (if (null? L)
       '()
       (let ((t (first-term L)))
         ((adjoin-term (neg-terms (rest-terms L)))
          (make-term (order t) (- (coeff t))))))
   )

こうしたら通った。微妙。

 (define (neg-terms L)
   (if (empty-termlist? L)
       L
       (let ((t (first-term L)))
         ((adjoin-term (neg-terms (rest-terms L)))
          (make-term (order t) (- (coeff t))))))
   )

これで sparse なソレは一段落なの??
微妙に気になっているのは first-term に空リストを渡したトキの挙動。タグが付いてないんだよねぇ。基本的には起こり得ないケースなはずなんですが ...

で、昨晩 dense 方面に着手したんですがハマりまくっています。