(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)))
))
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.