2点を通る直線、直線と点の距離

(defun def-line (p1 p2)
  "2点を通る直線を定義する。
   2点 p1(x1 y1) p2(x2 y2) が与えられたとき、ax + by + c = 0 を満たす(a b c)を返す。"
  (let ((x1 (car p1))
    (y1 (cadr p1))
    (x2 (car p2))
    (y2 (cadr p2)))
    (list (- y2 y1) (- x1 x2) (- (* x2 y1) (* x1 y2)))))

(defun line-point-distance (l p)
  "線l(a b c) と点p(x0 y0)の距離を求める。"
  (let ((a (car l))
    (b (cadr l))
    (c (caddr l))
    (x0 (car p))
    (y0 (cadr p)))
    (/ (abs (+ (* a x0) (* b y0) c))
       (sqrt (+ (expt a 2) (expt b 2))))))