;;; -*-Scheme-*- (define (perm x) (if (null? x) (list x) (let ((res '())) (for-each (lambda (e) (set! res (append res (map (lambda (p) (cons e p)) (perm (del e x)))))) x) res))) (define (del e l) (let loop ((r l)) (if (pair? r) (if (eq? e (car r)) (loop (cdr r)) (cons (car r) (loop (cdr r)))) '()))) (print (perm '(a b c d)))