File: change.lsp

package info (click to toggle)
xlispstat 3.52.14-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 7,560 kB
  • ctags: 12,676
  • sloc: ansic: 91,357; lisp: 21,759; sh: 1,525; makefile: 521; csh: 1
file content (15 lines) | stat: -rw-r--r-- 598 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
; Allow max of 9 of each coin
(defun change (quan &optional (coins '(25 10 5  1)) &aux result)
       (cond ((zerop quan) (list nil))
	     ((null coins) t)
	     ((> (first coins) quan) (change quan (rest coins)))
	     (t (dotimes (i (1+ (min 9 (/ quan (first coins)))))
			 (let ((res (change (- quan (* i (first coins)))
					    (rest coins))))
			      (when (listp res)
				  (if (zerop i) 
				      (setq result (append res result))
				      (setq result (append (mapcar #'(lambda (x) (cons (list i (car coins)) x))
								   res)
							   result))))))
		(if (null result) t result))))