(Common LISP) (defun subsets (k xs) (cond ((null xs) 'nil) ((= 1 k) (loop for x in xs collect (list x))) (t (union (subsets k (cdr xs)) (mapcar (lambda (x) (cons (car xs) x)) (subsets (1- k) (cdr xs))))))) (defun new-degree-sequence (ds is) (let ((ys (copy-list ds))) (dolist (i is) (decf (nth i ys))) (delete 0 (sort ys #'<)))) (let ((table (make-hash-table :test #'equal))) (defun graph-count (ds) (cond ((equal ds '(1 1)) 1) ((< (length ds) 3) 0) ((oddp (reduce #'+ ds)) 0) (t (or (gethash ds table) (setf (gethash ds table) (reduce #'+ (mapcar (lambda (x) (graph-count (new-degree-sequence (cdr ds) x))) (subsets (car ds) (loop for i from 0 below (1- (length ds)) collect i)))))))))) (defun regular-graph (n k) (loop repeat k collect n)) (loop for i from 7 to 20 do (format t "~d~%" (graph-count (regular-graph 6 i))))