(setq *print-length* 100) (defun foo (s) (let ((max (nc s))) (foo2 1)) 'ok) (defun foo2 (pas) (unless (> pas max) (rec pas ()) (foo2 (1+ pas)))) (defun rec (x sol) (if (= x 0) (im s sol pas) (rec (1- x) (cons (kamm (nthcdr (1- x) s) pas) sol)))) (defun kamm (s pas) (when (numberp (nth pas s)) (kamm2 (- (nth pas s)(car s))(nthcdr pas s)))) (defun kamm2 (inc s)(cond ((null (and s (numberp (nth pas s)))) inc) ((= inc (- (nth pas s)(car s))) (kamm2 inc (nthcdr pas s))))) (defun im (l sol pas) (unless (member nil sol) (let ((lsol (length sol)) (ll (length l))) (rplacd (last sol) sol) (format T "~%Succes ~A pas ~A" (calcule 0 sol) pas)))) (defun calcule (n sol) (unless (>= n ll) (cons (+ (nth (\\ n lsol) l) (* (truncate(/ n pas))(car sol))) (calcule (1+ n) (cdr sol))))) (defun nc (l) (if (and l (numberp (car l))) (1+ (nc (cdr l))) 0))