(defun pgcd3 (m n)
  (cond ((> m n) (pgcd3 n m))
        ((= (rem n m) 0) m)
        (t (pgcd3 (rem n m) m))))
(defun pgcd+ (li)
  (if (endp (cdr li)) ()
  (cons (pgcd3 (car li) (cadr li)) (pgcd+ (cdr li)))))
(defun pgcd* (li)
  (if (endp (cdr li)) (car li)
  (pgcd* (pgcd+ li))))
(defun nts>intervs (liste)
  (let ((prem (car liste)))
    (labels ((interne (li)
               (if (endp li) ()
               (cons (- (car li) prem)
                     (interne (cdr li))))))
      (interne liste))))
(defparameter Zarlino '(1 16/15 9/8 6/5 5/4 4/3 45/32 3/2 8/5 5/3 7/4 15/8))
(defun dt>Zarli (liste)
  (if (endp liste) ()
  (let ((dt (car liste)))
    (cons (* (nth (rem dt 12) Zarlino) (expt 2 (floor (/ dt 12))))
          (dt>Zarli (cdr liste))))))
(defun tension (linots)
  (* (log (pgcd* (dt>Zarli (nts>intervs linots))) 2.0) -.112272625))