Listとかいろいろさわった記録。

List

リストの宣言とheadとtail

scala> var l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.head
res0: Int = 1

scala> l.tail
res1: List[Int] = List(2, 3)

headとtailはSchemeのcarとcdrに相当するっぽいな。
ついでにいうと、consも使える。
car :: cdrみたいに書く。

scala> var l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> var l2 = 1 :: (2 :: (3 :: Nil)) 
l2: List[Int] = List(1, 2, 3)

scala> var l3 = 1 :: 2 :: 3 :: Nil
l3: List[Int] = List(1, 2, 3)

最後のは2番目を短く書いた形。
他に、空か調べるisEmpty、indexOf、filter、mapも使えるようだ。

for-Comprehensions

基本的に、for inと同じような動き?
ただし、inではなく<-を使うらしい。
厳密にはyieldも使うみたいだけど、
まだ、違いのわからぬ男なので、今ははしょる。

scala> for(i <- List.range(1. 4)) print(i)
123

rangeがある。

scala> for(i <- List.range(1, 5); j <- List.range(1, i)) print(i, j)
(2,1)(3,1)(3,2)(4,1)(4,2)(4,3)

こんな感じで、for()の中に結構好き勝手に書けるみたい。これがちょっと特殊なのかな。

タプル

もあるようだ。

scala> (1, 2)                                                       
res32: (Int, Int) = (1,2)

Array

前回のPythonでの反省をふまえて。
Arrayもあるよ。

scala> Array(1, 3)
res35: Array[Int] = Array(1, 3)