whats your purpose behind that ?? a) u want to understand the algorithm ? then go through backtracking and then try to solve the problem b) u want to learn LISP ?? then this is not the right place... u may want to go through LIPS tutorials and then have a look at at this problem again
On Sun, Jul 8, 2012 at 12:15 AM, Victor Manuel Grijalva Altamirano < kavic1.mar...@gmail.com> wrote: > The next code, it's about the problem Eight Queens, i found it in > internet, but i'm new in LISP and i donĀ“t know how to compile it... > Can you help me? > > (defun find-queen (arr p d) > (destructuring-bind ((px py) (dx dy)) (list p d) > (do ((x px (+ x dx)) > (y py (+ y dy))) > ((not (array-in-bounds-p arr x y))) > (when (= (aref arr x y) 1) (return t))))) > > (defun queen-in-row (board row) > (find-queen board (list row 0) '(0 1))) > > (defun queen-in-col (board col) > (find-queen board (list 0 col) '(1 0) )) > > (defun queen-in-diags (board x y) > (member t (mapcar (lambda (p) > (find-queen board (list x y) p)) > '((1 1) (-1 -1) (1 -1) (-1 1))))) > > (defun queen-in-range (board x y) > (or (queen-in-row board x) > (queen-in-col board y) > (queen-in-diags board x y))) > > (defun backtracking (pred explore node) > (if (funcall pred node) (list node) > (mapcan (lambda (n) (backtracking pred explore n)) > (funcall explore node)))) > > (defun count-queens (board) > (loop for i below (array-total-size board) > for box = (row-major-aref board i) > count (> box 0))) > > (defun solutionp (board) > (and board (= 8 (count-queens board)))) > > (defun put-queens (board) > (loop for i below 8 > when (not (queen-in-row board i)) > return > (loop for j below 8 > for b = (copy-array board) > when (not (queen-in-range board i j)) > do (setf (aref b i j) 1) > and collect b))) > > (defun 8-queens () > (backtracking #'solutionp #'put-queens board)) > > (defvar board (make-array '(8 8) :initial-element 0)) > > > -- > Victor Manuel Grijalva Altamirano > Universidad Tecnologica de La Mixteca > > -- > You received this message because you are subscribed to the Google Groups > "Algorithm Geeks" group. > To post to this group, send email to algogeeks@googlegroups.com. > To unsubscribe from this group, send email to > algogeeks+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/algogeeks?hl=en. > -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.