-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path191018.scm
70 lines (64 loc) · 1.16 KB
/
191018.scm
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#lang scheme
; Lab 191018
; Task 1
(define (minDigit num)
(define (sMinDigit num mn)
(cond
((= num 0) mn)
((< (remainder num 10) mn) (sMinDigit (quotient num 10) (remainder num 10) ) )
(else (sMinDigit (quotient num 10) mn ))
)
)
(sMinDigit num 10)
)
; Task 2
(define (sameDigits num)
(define (sSameDigits num bool)
(if (< num 10) bool
(sSameDigits
(quotient num 100)
(and bool
(= (remainder (floor (/ num 10)) 10) (remainder num 10))
)
)
)
)
(sSameDigits num #t)
)
; Task 3
(define (isFact num)
(define (sIsFact num cN cV)
(if (>= cV num) (= cV num)
(sIsFact num (+ 1 cN) (* cV cN) )
)
)
(sIsFact num 1 1)
)
; Task 4
(define (cfib num)
(define (fib n)
(define (it a b k)
(if (= k 0) b (it b (+ a b) (- k 1))))
(it 1 1 (- n 1)))
(define (scfib num cn)
(if (>= num (fib cn)) (scfib num (+ cn 1))
(if (>= (- (fib cn) num ) (/ (fib (- cn 2)) 2))
(fib (- cn 1))
(fib cn)
)
)
)
(scfib num 1)
)
; Task 5
(define (isPerfect n)
(define (sIsPerfect c s)
(if (= c 0) (= s n)
(if (= 0 (remainder n c))
(sIsPerfect (- c 1) (+ s c))
(sIsPerfect (- c 1) s)
)
)
)
(sIsPerfect (- n 1) 0)
)