17. 2015-02-28 jvmlang.daitokai.1.0.0 17
Scala REPL 編 : コレクション
● collect
(1 to 10).collectcollect {
case n if n % 2 == 0 => 2 -> n
case n if n % 3 == 0 => 3 -> n
}
● groupBy
(1 to 10).groupBygroupBy {_ % 3}
● mkString
(1 to 10).mkStringmkString(“,”)
19. 2015-02-28 jvmlang.daitokai.1.0.0 19
Scala REPL 編 : コレクション
● 落ち着け、落ち着いて素数を数えるんだ…
def isPrimeNo(n: Int): Boolean = n match {
case n if n < 2 => false
case n => (2 until n).forall {n % _ != 0}
}
(1 to 10).filter {isPrimeNo(_)}
20. 2015-02-28 jvmlang.daitokai.1.0.0 20
Scala REPL 編 : コレクション
● 落ち着け、落ち着いてフィボナッチ数列を唱えるんだ…
def fib(n: Int): Int =
if (n < 2) n
else fib(n – 2) + fib(n – 1)
(1 to 10).map {fib(_)}
21. 2015-02-28 jvmlang.daitokai.1.0.0 21
Scala REPL 編 : コレクション
● FizzBuzz であほに ...
def fizzBuzz(n: Int): String = n match {
case n if n % 3 == 0 && n % 5 == 0 => "FizzBuzz"
case n if n % 3 == 0 => "Fizz"
case n if n % 5 == 0 => "Buzz"
case n => n.toString
}
(1 to 20).map {fizzBuzz(_)}
33. 2015-02-28 jvmlang.daitokai.1.0.0 33
Appendix: GPIO ソース
object GPIO {
import java.io._
final val Low = "0".getBytes("ISO-8859-1")
final val High = "1".getBytes("ISO-8859-1")
final val PullupEnables = List(
216, 217, 218, 219, 220, 221, 222, 223, 224,
225, 226, 227, 228, 229
)
def export(no: Int): Unit = {
val pullup = PullupEnables(no)
writeNative("/sys/class/gpio/export",
pullup.toString)
writeNative(s"/sys/class/gpio/gpio$
{pullup}/direction", "out")
}
def openValue(no: Int): OutputStream = {
val pullup = PullupEnables(no)
new FileOutputStream(s"/sys/class/gpio/gpio$
{pullup}/value")
}
def writeValue(outp: OutputStream, value:
Boolean): Unit = {
outp.write(if (value) High else Low)
outp.flush
}
def unexport(no: Int): Unit = {
val pullup = PullupEnables(no)
writeNative("/sys/class/gpio/unexport",
pullup.toString)
}
def writeNative(path: String, value: String): Unit
= {
val outp = new FileOutputStream(path)
try {
outp.write(value.getBytes("ISO-8859-1"))
} finally {
outp.close
}
}
}
34. 2015-02-28 jvmlang.daitokai.1.0.0 34
Appendix: GPIO ソース
class GPIO(no: Int) {
val outp = {
GPIO.unexport(no)
GPIO.export(no)
GPIO.openValue(no)
}
def write(value: Boolean):
Unit = GPIO.writeValue(outp,
value)
def high: Unit = write(true)
def low: Unit = write(false)
def close: Unit = {
try {
outp.close
} catch {
case t: Throwable =>
log(s"${t.getClass.getName}:
${t.getMessage}")
} finally {
GPIO.unexport(no)
}
}
35. 2015-02-28 jvmlang.daitokai.1.0.0 35
Appendix: sleep ソース
def sleep(w: Int): Unit = {
val s = System.nanoTime
val e = s + w * 1000000L
while (e > System.nanoTime) {
Thread.`yield`()
}
}