Reasoned Schemer (33) わり算
わり算も引き算と同様、関係プログラミング式のやり方は取れないので独自に実装
筆算式にやっています
(define (ge n m)
(define (GE rn rm)
(if (null? rn)
#t
(let ((cn (car rn)) (cm (car rm)))
(cond ((> cn cm) #t)
((< cn cm) #f)
(else (GE (cdr rn) (cdr rm)))))))
(let ((ln (length n)) (lm (length m)))
(cond ((> ln lm) #t)
((< ln lm) #f)
(else (GE (reverse n) (reverse m))))))
(define (div n m)
(define (D qq rr mn)
(if (null? mn)
(list (trim-zero qq) rr)
(let ((amn (car mn)) (dmn (cdr mn)))
(cond ((ge rr amn)
(D (cons 1 qq) (sub rr amn) dmn))
(else
(D (cons 0 qq) rr dmn))))))
(if (null? m)
#f
(D '() n (minus-numbers n m))))
関係プログラミングとは違いすぎて比較してどうこうとは言いづらい
実質div
しか作ってないし
最初に出てきた形は単にかけ算を使っててシンプルだったんだけど
その後ほぼ理解不能なレベルまで複雑になっちゃったし