-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnumbers.shen
47 lines (39 loc) · 1.02 KB
/
numbers.shen
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
(define pos?
doc "Determines if number is positive."
{number --> boolean}
X -> (> X 0))
(define neg?
doc "Determines if number is negative."
{number --> boolean}
X -> (< X 0))
(define signum
doc "Returns -1 for negative number, 1 for positive, 0 for 0."
{number --> number}
X -> -1 where (< X 0)
X -> 1 where (> X 0)
_ -> 0)
(define abs
doc "Returns the absolute value of given number."
{number --> number}
X -> (* X (signum X)))
(define neg
doc "Returns negation of given number."
{number --> number}
X -> (* -1 X))
(define decrement
doc "Subtracts 1 from number."
{number --> number}
X -> (- X 1))
(define ceil {number --> number} X -> X) \\ pre-declaration
(define floor
doc "Rounds down to nearest integer."
{number --> number}
X -> X where (int? X)
X -> (neg (ceil (neg X))) where (neg? X)
X -> (- X (mod X 1)))
(define ceil
doc "Rounds up to nearest integer."
{number --> number}
X -> X where (int? X)
X -> (neg (floor (neg X))) where (neg? X)
X -> (+ 1 (- X (mod X 1))))