(defun balpart (lst)
"balace partion problem "
(let* ((sum (apply #'+ lst))
(halfsum (floor (/ sum 2)) )
(sol (make-list (+ halfsum 1) :initial-element nil ))
)
(setf (first sol ) t )
(dolist (i lst )
(do ((j halfsum (decf j)))
((< j i))
(if (nth (- j i) sol)
(setf (nth j sol) t))))
(let ( (halfcloser (do ((i halfsum (decf i) )) ((nth i sol) i ) )))
(return-from balpart (- sum halfcloser halfcloser)))
))
(format t "Please input a number list: ~%")
(finish-output t )
(format t "The minimum difference is : ~A~%" (balpart (read) ) )
詳細過程請參考此連結