Somando dígitos de um número com Lisp

Vez ou outra aparece um problema no Project Euler que pede para somar os dígitos de um número grande. Esta é uma maneira rápida de resolver o problema, em apenas 5 linhas de código. Primeiro transformamos o número e uma lista com os digitos, e depois usamos a função reduce para somar esses números:

(defun num->list (num &optional (lst nil))
  (if (zerop num)
    lst
    (num->list (floor num 10) (push (mod num 10) lst))))

(print (reduce #'+ (num->list (expt 2 1000))))
page_revision: 0, last_edited: 1238283335|%e %b %Y, %H:%M %Z (%O ago)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License