(define list-index (lambda (listx item)
  (if (null? listx)
      'error
      (if (eqv? item (car listx))
          0
          (+ 1 (list-index (cdr listx) item)) ) ) ))

(define remove (lambda (item listx)
  (cond ((null? listx)
           '())
        ((equal? (first listx) item)
           (remove item (rest listx)))
        ( else
           (cons (first listx)
                 (remove item (rest listx)))) ) ))

(define for-each (lambda (proc listx)
  (cond ((not (null? l))
         (proc (car listx))
         (for-each proc (cdr listx)) )) ))

(define map (lambda (proc listx)
  (if (null? listx)
      '()
      (cons (proc (car listx))
            (map proc (cdr listx)) ) ) ))

(define filter (lambda (pred listx)
  (if (null? listx)
      '()
      (if (pred (car listx))
          (cons (car listx)
                (filter pred (cdr listx)) )
          (filter pred (cdr listx)) ) ) ))
