Left factorials,   !n,   may refer to either   subfactorials   or to   factorial sums;

the same notation can be confusingly seen being used for the two different definitions.

Sometimes,   subfactorials   (also known as derangements)   may use any of the notations:

     !n`   
     !n  
     n¡  


(It may not be visually obvious, but the last example uses an upside-down exclamation mark.)



This Rosetta Code task will be using this formula   (factorial sums)   for   left factorial:


   



!
n
=

∑

k
=
0


n
−
1


k
!


{\displaystyle !n=\sum _{k=0}^{n-1}k!}




 where


   



!
0
=
0


{\displaystyle !0=0}






Task
Display the left factorials for:

   zero through ten     (inclusive)
   20   through   110   (inclusive)   by tens


Display the length (in decimal digits) of the left factorials for:

   1,000   through   10,000   (inclusive), by thousands.


Also see

   The OEIS entry: A003422 left factorials
   The MathWorld entry: left factorial
   The MathWorld entry: factorial sums
   The MathWorld entry: subfactorial


Related task

   permutations/derangements (subfactorials)


 
(import (scheme base)     ;; library imports in R7RS style
        (scheme write)
        (srfi 1 lists))
 
(define (factorial n)
  (fold * 1 (iota n 1)))
 
(define (left-factorial n)
  (fold + 0 (map factorial (iota n))))
 
(define (show i r) ; to pretty print the results
  (display "!") (display i) (display " ") (display r) (newline))
 
;; show left factorials for zero through ten (inclusive)
(for-each 
  (lambda (i) (show i (left-factorial i)))
  (iota 11))
 
;; show left factorials for 20 through 110 (inclusive) by tens
(for-each 
  (lambda (i) (show i (left-factorial i)))
  (iota 10 20 10))
 
;; number of digits in 1000 through 10000 by thousands:
(for-each 
  (lambda (i) (show i (string-length (number->string (left-factorial i)))))
  (iota 10 1000 1000))
 