-(defun !reduce (func list &key initial-value)
- (if (null list)
- initial-value
- (!reduce func
- (cdr list)
- :initial-value (funcall func initial-value (car list)))))
+(defun !reduce (func list initial-value)
+ (let ((result initial-value))
+ (dolist (element list result)
+ (setq result (funcall func result element)))))