N-Queen Lisp(1- n)是什么意思?

时间:2015-09-29 05:22:21

标签: lisp common-lisp

(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;可选语法?

谢谢,

1 个答案:

答案 0 :(得分:4)

1-是一个从参数中减去一个的函数。

&optional表示可选参数将随之而来。通常默认值为nil,但如果您将其指定为列表 - 即(m n),则参数默认为列表中的第二个值(在这种情况下,如果第二个参数为m,则默认为n不及格)。