File: perm.scm

package info (click to toggle)
elk 3.0-6
  • links: PTS
  • area: main
  • in suites: potato, slink
  • size: 4,068 kB
  • ctags: 3,123
  • sloc: ansic: 20,686; lisp: 5,232; makefile: 419; awk: 91; sh: 21
file content (21 lines) | stat: -rw-r--r-- 399 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;;; -*-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)))