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)
こういうことですか?