(defun queens (n &optional (m n))
(if (zerop n)
(list nil)
(loop for solution in (queens (1- n) m) ;; <=== what does the (1- n) mean?
nconc (loop for new-col from 1 to m
when (loop for row from 1 to n
for col in solution
always (/= new-col col (+ col row) (- col row)))
collect (cons new-col solution)))))
(defun print-solution (solution)
(loop for queen-col in solution
do (loop for col from 1 to (length solution)
do (write-char (if (= col queen-col) #\Q #\.)))
(terpri))
(terpri))
(defun print-queens (n)
(mapc #'print-solution (queens n)))
嗨,任何人都可以向我解释这个N-Queen algo为什么会有(1-n)?什么是&#34; 1 - &#34;部分和&amp;可选语法?
谢谢,
答案 0 :(得分:4)
1-
是一个从参数中减去一个的函数。
&optional
表示可选参数将随之而来。通常默认值为nil
,但如果您将其指定为列表 - 即(m n)
,则参数默认为列表中的第二个值(在这种情况下,如果第二个参数为m,则默认为n不及格)。