kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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しか作ってないし

最初に出てきた形は単にかけ算を使っててシンプルだったんだけど
その後ほぼ理解不能なレベルまで複雑になっちゃったし