#!/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) (defvar sum 0) (loop for i from 1 to (/ number 2) when ( = 0 (mod number i) ) do ( setf sum (+ sum i) ) do (format t "~s!" sum) ) number ) (format t "* Imperative *~%") (dolist (x inputs) (princ x) (princ " is") (if (perfectNumberImperative x) (princ "") (princ " NOT")) (princ " Perfect ") (format t "~%") ) (format t "~%* Functional *~%") (dolist (x inputs) (princ x) (princ " is") (if (perfectNumberFunctional x) (princ "") (princ " NOT")) (princ " Perfect ") (format t "~%") )