Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
4
Task/Factorial/Scheme/factorial-1.ss
Normal file
4
Task/Factorial/Scheme/factorial-1.ss
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(define (factorial n)
|
||||
(if (<= n 0)
|
||||
1
|
||||
(* n (factorial (- n 1)))))
|
||||
6
Task/Factorial/Scheme/factorial-2.ss
Normal file
6
Task/Factorial/Scheme/factorial-2.ss
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
(define (factorial n)
|
||||
(let loop ((i 1)
|
||||
(accum 1))
|
||||
(if (> i n)
|
||||
accum
|
||||
(loop (+ i 1) (* accum i)))))
|
||||
4
Task/Factorial/Scheme/factorial-3.ss
Normal file
4
Task/Factorial/Scheme/factorial-3.ss
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(define (factorial n)
|
||||
(do ((i 1 (+ i 1))
|
||||
(accum 1 (* accum i)))
|
||||
((> i n) accum)))
|
||||
23
Task/Factorial/Scheme/factorial-4.ss
Normal file
23
Task/Factorial/Scheme/factorial-4.ss
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
;Using a generator and a function that apply generated values to a function taking two arguments
|
||||
|
||||
;A generator knows commands 'next? and 'next
|
||||
(define (range a b)
|
||||
(let ((k a))
|
||||
(lambda (msg)
|
||||
(cond
|
||||
((eq? msg 'next?) (<= k b))
|
||||
((eq? msg 'next)
|
||||
(cond
|
||||
((<= k b) (set! k (+ k 1)) (- k 1))
|
||||
(else 'nothing-left)))))))
|
||||
|
||||
;Similar to List.fold_left in OCaml, but uses a generator
|
||||
(define (fold fun a gen)
|
||||
(let aux ((a a))
|
||||
(if (gen 'next?) (aux (fun a (gen 'next))) a)))
|
||||
|
||||
;Now the factorial function
|
||||
(define (factorial n) (fold * 1 (range 1 n)))
|
||||
|
||||
(factorial 8)
|
||||
;40320
|
||||
Loading…
Add table
Add a link
Reference in a new issue