anchor.diff:    (reduce #'+ (map 'vector #'* word scoring-word)))
   
   
  +
  +
  +
  +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  +;;;; Sequence objects to closely model real world molecules.
  +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  +
  +;; For now those are very similar to ensembl objects. maybe I will
  +;; change that later.
  +(defclass transcript (nucleotide-sequence)
  +  ((exons :accessor exons
  +          :initarg :exons
  +          :initform #()
  +          :type sequence)
  +   (protein :accessor protein
  +            :initarg :protein
  +            :initarg :translation
  +            :documentation "The protein the transcript is coding for, if any."
  +            :initform nil))
  +   (:documentation "An transcript describes a RNA sequence that can be
  +spliced into a mature mRNA.  Exons are the elements that make up the
  +mRNA.  All sequence elements which are cut out in the splicing process
  +are called introns and can be thought to be the relative complements of
  +the exons within the transcript."))
  +
  +(defclass exon (nucleotide-sequence)
  +  ((transcript :accessor transcript
  +               :initarg transcript
  +               :documentation "The transcript corresponding to this exon.")
  +   (circular :allocation :class
  +             :initform nil)))
  +
  +(defclass protein (amino-acid-sequence)
  +  ((transcript :initarg :transcript
  +               :accessor transcript
  +               :documentation "The transcript which codes for this protein.")
  +   (features :initarg :features
  +             :accessor protein-features
  +             :documentation "Protein features")))
  +
  +(defclass protein-feature (feature)
  +  ((protein :initarg protein
  +            :accessor protein
  +            :accessor translation
  +            :documentation "the protein to which this feature belongs.")
  +   (feat-start :initarg :start
  +               :accessor feat-start
  +               :accessor lower-bound)
  +   (feat-end :initarg :end
  +             :accessor feat-end
  +             :accessor upper-bound)))
  +
  +(defclass transmembrane-helix (protein-feature)
  +  ())
  +
  
positive.code: (defmethod print-object ((seq bio-sequence) stream)
    "The sequence object is printed to an output stream. This is fairly
  handy but somehow we feel that some more abstract and more generic
  mechanism is required."
    (print-unreadable-object (seq stream :type t)
      (with-slots (id name seq) seq
        (format stream ":id ~A :name ~S :seq ~A~:[...~]"
                id
                name
                (subseq seq 0 (min 15 (length seq)))
                (<= (length seq) 15)))))
  
  
  (defgeneric bio-sequence-length (seq)
  
negative.code: 
  (defmethod initialize-instance :after ((seq bio-sequence) &rest args)
    (declare (ignore args))
    (unless (slot-boundp seq 'seq-end)
      (setf (seq-end seq) (length (bio-sequence-seq seq)))))
  
  
  (defclass nucleotide-sequence (bio-sequence)
  