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

标签 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 算法为什么会有 (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/

相关文章:

excel - 是否有用于创建 Excel 电子表格的通用 Lisp 库?

common-lisp - 对 `` ql :quickload`` and executable scripts in SBCL感到困惑

scheme - 将代码从 Lisp 转换为 SCHEME

lisp - Lisp 中的递归与迭代

lisp - 使用 lisp 生成随机数列表列表

methods - 我怎样才能取消一个合格的方法?

javascript - 如何在JavaScript中的自定义LISP中编写宏扩展

common-lisp - 使用 CLOS 类实例作为哈希表键?

lisp - 如何将特殊运算符应用于列表?

java - Common Lisp 中的类自省(introspection)