-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcode10.rkt
More file actions
48 lines (36 loc) · 754 Bytes
/
code10.rkt
File metadata and controls
48 lines (36 loc) · 754 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#lang racket
(require racket/trace)
(define fact
(lambda (n)
(if (<= n 0)
1
(* n (fact (- n 1))))))
(trace fact)
(fact 6)
(define fact-iter
(lambda (n a)
(if (<= n 0)
a
(fact-iter (- n 1) (* n a)))))
(trace fact-iter)
(fact-iter 6 1)
(define fact-cps
(lambda (n k)
(if (<= n 0)
(k 1)
(fact-cps (- n 1) (lambda (r) (k (* n r)))))))
(trace fact-cps)
(fact-cps 6 (lambda (x) x))
(define fib
(lambda (n)
(if (<= n 1)
1
(+ (fib (- n 1)) (fib (- n 2))))))
(trace fib)
(fib 5)
(define fact-cps2
(lambda (n k1 k)
(if (<= n 0)
(k1 1 k)
(fact-cps2 (- n 1) (lambda (r k) (k1 (* n r) k)) k))))
(fact-cps2 6 (lambda (x k) (k x)) (lambda (x) x))