PARTIAL SOLUTIONS to RECURSIVE PRACTICE PROBLEMS

 

These are some solutions to the more difficult problems. I’ll put up more variabtions when I get a chance.

 

 (define (number-everything-embedded sent)

  (nee-helper 1 sent))

 

(define (nee-helper cur sent)

  (if (empty? sent)

      '()

      (se (word cur ': (first sent))

          (nee-helper (+ cur 1) (bf sent)))))

 

(define (number-everything-tail sent)

  (net-helper 1 sent '()))

 

(define (net-helper cur sent so_far)

  (if (empty? sent)

      so_far

      (net-helper (+ cur 1) (bf sent) (se so_far (word cur ': (first sent))))))

 

(define (wave-maker v p c)

  (if (= c 0)

      ""

      (word (make-one-wave-e v p) (wave-maker v p (- c 1)))))

 

(define (make-one-wave-e v p)

  (if (= v p)

      (word p p)

      (word v (make-one-wave-t (+ v 1) p) v)))

 

(define (make-one-wave-t v p)

  (mow-t-helper v p "" ""))

 

(define (mow-t-helper v p lh rh)

  (if (= v p)

      (word lh p p rh)

      (mow-t-helper (+ v 1) p (word lh v) (word v rh))))

 

 (define (partition pivot sent)

  (part-t-help pivot sent '() '() '()))

 

(define (part-t-help pivot sent l e g)

  (cond ((empty? sent) (sentence l e g))

        ((< (first sent) pivot) (part-t-help pivot (bf sent) (se l (first sent)) e g))

        ((< pivot (first sent)) (part-t-help pivot (bf sent) l e (se g (first sent))))

        (else (part-t-help pivot (bf sent) l (se e (first sent)) g))))

 

(define (adds-to-n n sent)

  (cond ((= n 0) #t)

        ((empty? sent) #f)

        (else (or (adds-to-n (- n (first sent)) (bf sent))

                  (adds-to-n n (bf sent))))))

 

(define (exactly-n-a-words n sent)

  (cond ((empty? sent) (= n 0))

        ((a-word? (first sent)) (exactly-n-a-words (- n 1) (bf sent)))

        (else (exactly-n-a-words n (bf sent)))))

     

(define (a-word? word)

  (equal? (first word) 'a))