(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 算法为什么会有 (1- n)? “1-”部分和 &optional 语法是什么?
谢谢你,
最佳答案
1-
是一个从其参数中减去 1 的函数。
&optional
声明可选参数将在后面。通常默认值为 nil
,但如果您将其指定为列表 - 即 (m n)
,则参数默认为列表中的第二个值(在本例中为 m如果未传递第二个参数,则默认为 n)。
关于lisp - N-Queen Lisp(1- n)是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836213/