(define (rl) (load "cartesian-proper.ss")) (define list-recur (lambda (f init) (letrec ([helper (lambda (l) (if (null? l) init (f (car l) (helper (cdr l)))))]) helper))) ;;; Let's start off easy, we'll go through the second list (define cart1 (lambda (l1 l2) ((list-recur (lambda (x y) (cons (cons x l1) y)) ()) l2))) (define cart2 (lambda (l1 l2) ((list-recur (lambda (x y) (append ((list-recur (lambda (k m) (cons (list x k) m)) ()) l2) y)) ()) l1))) (define cart4 (lambda (l1 l2) (let* ([helper2 (lambda (x) (list-recur (lambda (k m) (cons (list x k) m)) ()))] [helper (list-recur (lambda (x y) (append ((helper2 x) l2) y)) ())]) (helper l1))))