(defun factorial (n)
(check-type n (integer 0 *))
(loop :for fact = 1 :then (* fact i)
:and i :from 1 :to n
:finally (return fact)))
(defun factorials (&rest args)
(loop :for x :in args
:collect (restart-case (factorial x)
(skip-this-shit (&optional y) y))))
(defun fix-input (cond)
(typecase #1=(type-error-datum cond)
((integer * 0) (store-value (abs #1#)))
(real (store-value (floor #1#)))
(t (invoke-restart 'skip-this-shit :skipped))))
(handler-bind ((type-error #'fix-input))
(print (factorials 1 5.2 2 3 "sasai" -1 5 6)))
KGRlZnVuIGZhY3RvcmlhbCAobikKICAoY2hlY2stdHlwZSBuIChpbnRlZ2VyIDAgKikpCiAgKGxvb3AgOmZvciBmYWN0ID0gMSA6dGhlbiAoKiBmYWN0IGkpCiAgICAgICAgOmFuZCBpIDpmcm9tIDEgOnRvIG4KICAgICAgICA6ZmluYWxseSAocmV0dXJuIGZhY3QpKSkKCihkZWZ1biBmYWN0b3JpYWxzICgmcmVzdCBhcmdzKQogIChsb29wIDpmb3IgeCA6aW4gYXJncwogICAgICAgIDpjb2xsZWN0IChyZXN0YXJ0LWNhc2UgKGZhY3RvcmlhbCB4KQogICAgICAgICAgICAgICAgICAgKHNraXAtdGhpcy1zaGl0ICgmb3B0aW9uYWwgeSkgeSkpKSkKCihkZWZ1biBmaXgtaW5wdXQgKGNvbmQpCiAgKHR5cGVjYXNlICMxPSh0eXBlLWVycm9yLWRhdHVtIGNvbmQpCiAgICAoKGludGVnZXIgKiAwKSAoc3RvcmUtdmFsdWUgKGFicyAjMSMpKSkKICAgIChyZWFsICAgICAgICAgIChzdG9yZS12YWx1ZSAoZmxvb3IgIzEjKSkpCiAgICAodCAgICAgICAgICAgICAoaW52b2tlLXJlc3RhcnQgJ3NraXAtdGhpcy1zaGl0IDpza2lwcGVkKSkpKQoKKGhhbmRsZXItYmluZCAoKHR5cGUtZXJyb3IgIydmaXgtaW5wdXQpKQogICAgKHByaW50IChmYWN0b3JpYWxzIDEgNS4yIDIgMyAic2FzYWkiIC0xIDUgNikpKQo=