#! /usr/bin/guile \ -e main -s !# (define (flatmap proc seq) (apply append (map proc seq))) (define (permutations s) (if (null? s) (list '()) (flatmap (lambda (x) (map (lambda (p) (cons x p)) (permutations (remove-1 x s)))) s))) (define (remove-1 item sequence) (cond ((null? sequence) '()) ((equal? (car sequence) item) (cdr sequence)) (else (cons (car sequence) (remove-1 item (cdr sequence)))))) (define (permstr str) (for-each (lambda (x) (display x) (newline)) (map (lambda (x) (list->string x)) (permutations (string->list str))))) (define (main args) (if (= (length args) 2) (permstr (cadr args)))) ;; Local Variables: ;; mode: scheme ;; End: