(func .list-of-num (num) (def nums (list)) (for-count num (redef nums (append nums _idx_))) nums) (func .rough-sqrt (num) (.rough-sqrt num 1)) (func .rough-sqrt (num val) (branch ((eq? (* val val) num) val) ((> (* val val) num) (- val 1)) (#true (.rough-sqrt num (+ 1 val))))) (func factor-naive (num) (filter (lambda (x) (int? (/ num x))) (.list-of-num num))) (func factor-better (num) (append (filter (lambda (x) (int? (/ num x))) (.list-of-num (floor (/ num 2)))) num)) (func factor-even-better (num) (def ret (list)) (for-each (.list-of-num (.rough-sqrt num)) (if (int? (/ num _item_)) (redef ret (append ret (list _item_ (/ num _item_)))))) ret)