(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))))
kozima
#4323()
[
Common Lisp
]
Rating1/1=1.00
再帰とか普通のやり方は既出なので、コード生成と eval で。
(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))))Rating1/1=1.00-0+
[ reply ]