(define integer-partitions (case-lambda ((n) (integer-partitions n n)) ((n max) (if (<= n 0) (list '()) (let loop ((i 1)) (cond ((> i max) '()) ((= i n) (list (list n))) (else (append (map (lambda (lst) (cons i lst)) (integer-partitions (- n i) i)) (loop (+ i 1))))))))))
https://mastodon.tojo.tokyo/system/media_attachments/files/113/021/606/173/660/756/original/f783dd6fad27f248.png