사용 가능한 교단 세트가 주어지면서 주어진 금액에 해당하는 지폐/동전 종목의 모든 조합을 얻고 싶습니다.lvars의 순서를 조작하는 방법
그래서 예를 들어, (change 14 #{1 2 5 10})
위해 나는
(
{10 1, 5 0, 2 2, 1 0}
{10 1, 5 0, 2 1, 1 2}
{10 0, 5 2, 2 2, 1 0}
{10 0, 5 2, 2 1, 1 2}
;; ...
)
기대하는 나의 시도는
(defn change [amount denominations]
(let [dens (sort > denominations)
vars (repeatedly (count dens) lvar)]
(run* [q]
(== q (zipmap dens vars))
(everyg #(fd/in % (fd/interval 0 amount)) vars)
(== amount (apply + (map * dens vars))))))
했다 그러나 자연적으로 마지막 줄이 작동하지 않습니다. 나는 vars
시퀀스를 통해 일종의 reduce
을 수행하는 방법을 찾지 못했고, 개별적인 lvar 각각에 대해 유효하지 않은 목표를 설정할 수있는 다른 방법을 찾지 못했지만, 전체적으로 (외부 값, amount
및 이 예에서는 denominations
).
위대한 해답과 설명, 감사합니다! – alepeino