リハビリ
(define plus (lambda (x y) (list (+ (car x) (car y)) (+ (cadr x) (cadr y)))))
あるいは減算。
(define minus (lambda (x y) (list (- (car x) (car y)) (- (cadr x) (cadr y)))))
で、確認。
gosh> (plus '(1 2) '(1 2)) (2 4) gosh> (minus '(1 2) '(1 2)) (0 0)
で、良いのかな。積はどうすりゃ良いのかな。
(define mul (lambda (x y) (list (- (* (car x) (car y)) (* (cadr x) (cadr y))) (+ (* (car x) (cadr y)) (* (cadr x) (car y))))))
ええと試験してみます。
gosh> (mul '(1 2) '(1 2)) (-3 4)
一応あってるように見えます。割り算は結構アレ。
(define div (lambda (x y) (let ((denom (+ (* (car y) (car y)) (* (cadr y) (cadr y))))) (list (/ (+ (* (car x) (car y)) (* (cadr x) (cadr y))) denom) (/ (- (* (cadr x) (car y)) (* (car x) (cadr y))) denom)))))
検算が大変。
gosh> (div '(1 2) '(1 2)) (1 0)
ええと、denom は上だと 5 になるのかな。実数部は確かに 1 になります。虚数部は分子が 0 なので 0 なのか。