A community for students.
Here's the question you clicked on:
 0 viewing
veryconfused
 3 years ago
I've got
(define (lodclean lst)
(cond [(empty? lst) empty]
[(and (> (first lst) 0)(empty? (rest lst))) (first lst)]
[(and (= (first lst) 0)(empty? (rest lst))) empty]
[else (cons (first lst) (lodclean (rest lst)))]))
but when i test
(lodclean (list 1 2 3 4 0 0))
i get (list 1 2 3 4 0), i need to get rid of all trailing zeros, please help @Computer Science
veryconfused
 3 years ago
I've got (define (lodclean lst) (cond [(empty? lst) empty] [(and (> (first lst) 0)(empty? (rest lst))) (first lst)] [(and (= (first lst) 0)(empty? (rest lst))) empty] [else (cons (first lst) (lodclean (rest lst)))])) but when i test (lodclean (list 1 2 3 4 0 0)) i get (list 1 2 3 4 0), i need to get rid of all trailing zeros, please help @Computer Science

This Question is Closed

Narsat
 3 years ago
Best ResponseYou've already chosen the best response.0Try to use terminal recursivity since you're trying to work from the end to the start. It should be something like... (define (lodclean list) (lodcleanaux list '())) (define (lodcleanaux list r) (cond ((empty? list) r) ((> (car list) 0) (lodcleanaux (cdr list) (append r (list (car list)))))))) First method works only to call the aux method that actually does the job. It should work though I can't test it at the moment. car = first cdr = rest r = aux list to which values are passed to and will be returned in the end.

dmancine
 3 years ago
Best ResponseYou've already chosen the best response.0@veryconfused, Try putting several 0's at the end of your test list. It's only removing the very last 0 (not all but one). Also, if your test list ends with a nonzero number you're not returning a list. Your base cases seem to be where you've put the important logic. You're modifying the return value, so once you reach the base case you'll start returning from the recursive calls, and all you'll do is cons the head of the list to the return value. I created another function, zeros?, which returns #t if the list is empty or full of zeros. As I cdr down the list in lodclean I check zeros? each time. When it's #t I start returning, and cons the car of the current list to the return value. I don't like it because in the worst case (a list of all zeros with a nonzero at the very end) it's O(n^2). And it's not even tail recursive. (It's been a long time since I've had to think in Scheme.)

dmancine
 3 years ago
Best ResponseYou've already chosen the best response.0@Narsat, I couldn't get your code to return anything with any test case.
Ask your own question
Sign UpFind more explanations on OpenStudy
Your question is ready. Sign up for free to start getting answers.
spraguer
(Moderator)
5
→ View Detailed Profile
is replying to Can someone tell me what button the professor is hitting...
23
 Teamwork 19 Teammate
 Problem Solving 19 Hero
 Engagement 19 Mad Hatter
 You have blocked this person.
 ✔ You're a fan Checking fan status...
Thanks for being so helpful in mathematics. If you are getting quality help, make sure you spread the word about OpenStudy.