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))