我正在尝试遍历 am 长度数组中 n 值的所有可能组合。使用 nil 表示空的地方。在此示例中,n 为 2,m 为 3
;; ('a 'b nil) -> ('a nil 'b)
;; (nil 'a 'b) -> signal end of the rep.
;; ('a 'b nil) -> ('a nil 'b) -> (nil 'a 'b) -> Run out of possiblites.
;;
;; ('a 'b nil nil)
(defun next-candidate (candidate)
(labels ((iter-helper (xs &optional prev-item)
(if (and (listp xs)
(null (first xs)))
(progn
(rotatef (first xs) prev-item)
candidate)
(iter-helper (rest xs) (first xs)))))
(when (null (first candidate))
(signal 'no-more-combinations))
(iter-helper candidate)))
(let ((test (list 1 nil 3)))
(next-candidate test))
=> (1 1 3) Expected (nil 1 3)
为什么 rotaref 不交换值?