Comment detail

自然数の分割 (Nested Flatten)

再帰とか普通のやり方は既出なので、コード生成と eval で。

1
2
3
4
5
6
7
8
9
(defun partition (n m)
  (eval (gen-partition n m 0 (loop repeat m collect (gensym)))))

(defun gen-partition (n m i vars)
  (if (= i m)
      `(if (= (+ ,@vars) ,n)
           (format t "~@{~D~^, ~}~%" ,@vars))
    `(loop for ,(nth i vars) from ,n downto 0
       do ,(gen-partition n m (1+ i) vars))))

Index

Feed

Other

Link

Pathtraq

loading...