10 POINTS

Problem 3.   Develop the program count, which counts how many times two strings occur in the given list. It consumes two strings and a list of strings; the result is a number.

  ;; List of string: A Los is one of:
  ;; -- empty 
  ;; -- (cons String Los)

Solution:

  ;; count: String String Los -> Number [PT 1]
  ;; count how often left and right occur in los [PT 1]
  (define (count left right los) ; [PT 1]
    (cond ;; [PT 2: for two cond lines]
      [(empty? los) 0] ;; [PT 1, for base case]
      [else (cond ;; [PT 2, for correctness in this case]
              [(or (string=? (first los) left)
                   (string=? (first los) right))
               (+ 1 (count left right (rest los)))]
              [else (count left right (rest los))])]))

  ;; Examples/tests:
  ;; [PT 2; for a non-trivial example or two examples]
  (equal? (count
            "le"
            "ri"
            (cons "he"
              (cons "le"
                (cons "ri"
                  (cons "le"
                    (cons "ri" empty))))))
            4)