#!/usr/local/bin/sbcl --script (defvar inputs (list 1 2 6 8 28 46)) (defun perfectNumberFunctional (number) (= number (loop for i from 1 below number when (= 0 (mod number i)) sum i))) (defun perfectNumberImperative (number) (format t "number: ~s ~%" number) (defvar sum 0) (setq sum 0) (loop for i from 1 to (- number 1) when ( = 0 (mod number i) ) do (setq sum (+ sum i)) ) (format t "sum: ~s ~%" sum) number ) (format t "* Imperative *~%") (dolist (x inputs) (perfectNumberImperative x) ) (format t "~%* Functional *~%") (dolist (x inputs) (princ x) (princ " is") (if (perfectNumberFunctional x) (princ "") (princ " NOT")) (princ " Perfect ") (format t "~%") )