; utils (define fold-left (lambda (lst op e) (if (null? lst) e (fold-left (cdr lst) op (op e (car lst))) ) ) ) (define fold-right (lambda (lst op e) (if (null? lst) e (op (car lst) (fold-right (cdr lst) op e)) ) ) ) (define zip (lambda (lst1 lst2) (map list lst1 lst2) ) ) (define unzip (lambda (pairs) (list (map car pairs) (map cadr pairs)) ) ) (define filter (lambda (p lst) (if (null? lst) '() (if (p (car lst)) (cons (car lst) (filter p (cdr lst))) (filter p (cdr lst)) ) ) ) ) (define displayln (lambda (x) (display x) (display "\n") ) )