Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(Using the programming language Scheme) - Define a procedure remove-last that re

ID: 3664178 • Letter: #

Question

(Using the programming language Scheme) - Define a procedure remove-last that removes the last top-level occurrence of a
given element item in a list Is. Test your procedure on:

;(remove-last 'a '(b a n a n a s)) ==> (b a n a n s)
;(remove-last 'a '(b a n a n a)) ==> (b a n a n)
;(remove-last 'a '()) ==> ()

Below is my solution with a helper. I first reverse the list and then remove the first element, but I'm not sure how to reverse the final output of the list.

(define remove-last
(lambda (item ls)
(cond
((null? ls) '())
((h-remove-last item (reverse ls))))))

(define h-remove-last
(lambda (item ls)
(cond
((null? ls) '())
((equal? (car ls) item) (cdr ls))
(else (cons (car ls) (h-remove-last item (cdr ls)))))))

Explanation / Answer

Answer

;for first list

(define (deleteitem removelast item)

(lambda (item 1st)
( cond
((null? removelast) ’())
((equal? (car removelast ) item) (deleteItem (cdr removelast ) item))
(else (cons (car removelast ) (deleteitem (cdr removelast ) item)))

))
;for second list

(define (deleteitem removelast2 item)
(lambda (item 2nd)
( cond
((null? removelast2) ’())
((equal? (car removelast2 ) item) (deleteItem (cdr removelast2 ) item))
(else (cons (car removelast2 ) (deleteitem (cdr removelast2 ) item)))

))

;for third list
(define (deleteitem removelast3 item)
(lambda (item 3rd)
( cond
((null? removelast3) ’())
((equal? (car removelast3 ) item) (deleteItem (cdr removelast3 ) item))
(else (cons (car removelast3 ) (deleteitem (cdr removelast3 ) item)))

))