-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScala
More file actions
111 lines (82 loc) · 2.73 KB
/
Scala
File metadata and controls
111 lines (82 loc) · 2.73 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
console
scala> 34+65
res0: Int = 99
scala> def radius = 10
radius: Int
scala> def pi = 3.14159
pi: Double
scala> radius * pi
res1: Double = 31.4159
scala> def square(x:Double) = x * x
square: (x:Double)Double
scala> square(2)
res2: Double = 4.0
scala> square(5+4)
res3: Double = 81.0
scala> square(square(4))
res4: Double = 256.0
scala> def sumOfSquares(x: Double,y: Double) = square(x) + square(y)
sumOfSquares: (x: Double,y:Doble)Double
/*
def power(x: Double,y Int)[: Double (返回类型,可以省略)]= ...
int 32-bit double 64-bit
*/
scala> def abs(x: Int) = if (x>=0) x else -x
abs:(x: Int)Int
scala> abs(-10)
res5: Int = 10
/*
布尔操作:
ture false
!b
b && b
b || b
e <= e,e >= e,e < e,e > e,e == e,e != e
!ture ---- false
!false ---- true
true && e(e是任意变量) ---- e
false && e ---- false
true || e ---- true
false || e ---- e
*/
scala> def and(x: Boolean,y: => Boolean)=
| if(x) y else false
and: (x: Boolean, y: => Boolean)Boolean
def sqrtIter(guess: Double, x: Double): Double =
if (isGoodEough(guess,x)) guess
else sqrtIter(improve(guess,x),x) //> sqrtIter: (guess: Double, x: Double)Double
def isGoodEough(guess: Double, x: Double) =
abs(guess * guess -x) / x < 0.001 //> isGoodEough: (guess: Double, x: Double)Boolean
def improve(guess: Double,x: Double) =
(guess + x / guess) /2 //> improve: (guess: Double, x: Double)Double
def sqrt(x: Double) = sqrtIter(1.0,x) //> sqrt: (x: Double)Double
def sum(f: Int=>Int,a: Int,b: Int)={
def loop(a:Int,acc:Int):Int =
if(a>b)acc
else loop(a+1,f(a)+acc)
loop(a,0)
}
//////////////////////////////////////////////////////////////////////////////////////
object rationls {
val x = new Rational(1,3) //> x : weekthree.Rational = 1/3
val y = new Rational(5,7) //> y : weekthree.Rational = 5/7
val z = new Rational(3,2) //> z : weekthree.Rational = 3/2
x.numer //> res0: Int = 1
x.denom //> res1: Int = 3
x.neg //> res2: weekthree.Rational = -1/3
x.sub(y).sub(z) //> res3: weekthree.Rational = -79/42
}
class Rational(x: Int,y: Int){
def numer = x
def denom = y
def add(that: Rational)=
new Rational(
numer * that.denom + denom * that.numer,
denom * that.denom
)
override def toString = numer + "/" + denom
def neg: Rational = new Rational(-numer,denom)
def sub(that: Rational) = add(that.neg)
}
###################################### 分数类 ########################################
//////////////////////////////////////////////////////////////////////////////////////