;; DOES NOT preserve original pointer ;; returns modified list (define (filter! pred ls) (cond ((null? ls) '()) ((pred (car ls)) (filter! pred (cdr ls))) (else (begin (set-cdr! ls (filter! pred (cdr ls))) ls)))) ;; preserves original pointer, needs sentinel list ;; returns OKAY (define (filter! pred ls) (cond ((null? ls) 'okay) ((null? (cdr ls)) 'okay) ((not (pred (cadr ls))) (filter! pred (cdr ls)) (set-cdr! ls (cddr ls))) (else (filter! pred (cdr ls)) (set-cdr! ls (cdr ls)))))