Functional Programming 1 and 2

http://horstmann.com/sjsu/cs152/schedule.html

つまみ食い中

scala> val triple = (x : Int) => 3 * x
triple: (Int) => Int = <function>

scala> triple(5)
res3: Int = 15

scala> (1 to 10).map(triple)
res4: RandomAccessSeq.Projection[Int] = RangeM(3, 6, 9, 12, 15, 18, 21, 24, 27, 30)

scala> val x = (if (true) 2 else 4)*3
x: Int = 6

scala> val x = (if (false) 2 else 4)*3
x: Int = 12

scala> val lst = List(1,4,9)
lst: List[Int] = List(1, 4, 9)

scala> lst.head
res5: Int = 1

scala> lst.tail
res6: List[Int] = List(4, 9)

scala> lst.tail.tail.tail
res7: List[Int] = List()

scala> 0::lst 
res8: List[Int] = List(0, 1, 4, 9)

def sum(lst: List[Int]):Int={
if (lst.isEmpty)
  0
else
lst.head + sum(lst.tail)
}

scala> sum(lst)
res9: Int = 14

def squares(n : Int) : List[Int] ={ 
  if (n == 0) 
    List(0)
   else
    n * n :: squares(n - 1)
}

scala> squares(3)                       
res14: List[Int] = List(9, 4, 1, 0)
ほうほう。
scala> if (true) 3 else 4
res25: Int = 3

scala> if (true) 3 else "Hello"
res26: Any = 3

scala> val num = if (true) 3 else 4
num: Int = 3

scala> val num2 = if (true) 3
num2: Unit = ()

!!最後なんぞ?
elseを書かない場合Unit型の値が返る、だそうで。


あと、Anyってなんだ?
http://www.ibm.com/developerworks/jp/java/library/j-scala05298.html

技術的には、Scala のすべてのクラスの継承元となる基底クラス (Int、Float、Double などの型やその他の数値型) は scala.Any 型です。scala.Any 型は Scala の任意の型で利用できる中核的なメソッド・セット (==、!=、equals、hashCode、toString、isInstanceOf、asInstanceOf) を定義しますが、これらのメソッドの大部分は名前から十分容易に理解することができます。scala.Any 型から Scala は 2 つの大きな枝に分かれ、「基本型」は scala.AnyVal から継承し、「クラス型」は scala.AnyRe から継承します。 (そして scala.ScalaObject は scala.AnyRef から継承します。)

なるる?

scala> "San" :: "Jose" :: "State" :: Nil 
res5: List[java.lang.String] = List(San, Jose, State)

scala> "San" :: "Jose" :: "State"       
<console>:5: error: value :: is not a member of java.lang.String
       "San" :: "Jose" :: "State"
                       ^


?...

scala> Nil.::("State").::("Jose").::("San")  
res10: List[java.lang.String] = List(San, Jose, State)

こういうことですか?